我有两个带有以下各列的表:
作者
id | name | age
书籍
authorId | title | pages
我需要以某种方式获得拥有200页以上书籍的前五名作者。我尝试了一些类型的联接和子查询,这是我的最佳选择:
SELECT
author.name,
(SELECT COUNT(*) FROM books WHERE pages > 200 AND 'books.authorId' = 'author.id') AS PageCount
FROM
authors AS author
ORDER BY
PageCount DESC
不幸的是,它返回PageCount
为0。
获得所需结果的方式是什么?
答案 0 :(得分:1)
您可以使用内部联接,计数和分组依据来代替子查询:
SELECT au.name, COUNT(*) PageCount
FROM authors AS au
INNER JOIN books ON "books"."authorId" = au.id
WHERE books.pages > 200
GROUP BY au.name
ORDER BY PageCount DESC
不要在列名周围使用单引号。如果需要,请改用反引号。单引号用于文字字符串,而不用于列名称。