我有以下架构:
CREATE TABLE author (
id integer
, name varchar(255)
);
CREATE TABLE book (
id integer
, author_id integer
, title varchar(255)
, rating integer
);
Run Code Online (Sandbox Code Playgroud)
我希望每个作者都有它的最后一本书:
SELECT book.id, author.id, author.name, book.title as last_book
FROM author
JOIN book book ON book.author_id = author.id
GROUP BY author.id
ORDER BY book.id ASC
Run Code Online (Sandbox Code Playgroud)
显然你可以在mysql中做到这一点:在MySQL中加入两个表,从第二个表中只返回一行.
但是postgres给出了这个错误:
错误:列"book.id"必须出现在GROUP BY子句中或用于聚合函数:SELECT book.id,author.id,author.name,book.title as last_book FROM author JOIN book book ON book.author_id = author.id GROUP BY author.id ORDER BY book.id ASC
这是因为:
当GROUP BY存在时,SELECT列表表达式无法引用除聚合函数之外的未分组列,因为对于未分组列,将返回多个可能的值. …