我正在处理图书馆数据库,其中包含书籍和作者表。
表的列:Books
。id, name, year, author_id
的列表:Authors
.id, name
编写一个查询来获取作者姓名及其书籍数量 已在图书表中。
请注意,有些作者没有任何与之相关的书籍。在 在这种情况下,结果需要包含他们的名字并以 0 作为 数数。结果中的计数列应称为书籍。
按书籍数量从最高到最低对结果进行排序。
SELECT A.name AS name, COUNT(B.id) AS books
FROM Authors A
LEFT JOIN Books B ON A.id = B.author_id
GROUP BY A.name
ORDER BY books DESC, A.name;
我得到了结果,但不是预期的。 预期输出是:
name,books
F. Scott Fitzgerald,3
Jane Austen,3
William Shakespeare,2
Miguel de Cervantes,1
Herman Melville,1
Stephen King,0
Mark Twain,0
我得到的输出是:
name,books
F. Scott Fitzgerald,3
Jane Austen,3
William Shakespeare,2
Herman Melville,1
Miguel de Cervantes,1
Mark Twain,0
Stephen King,0
当您想按姓氏排序时,可以使用 SUBSTRING_INDEX
SELECT A.name AS name, COUNT(B.id) AS books
FROM Authors A
LEFT JOIN Books B ON A.id = B.author_id
GROUP BY A.name
ORDER BY books DESC,SUBSTRING_INDEX(`name`, " ", -1)
这给了你
名字 | 书籍 |
---|---|
简·奥斯汀 | 3 |
F。斯科特·菲茨杰拉德 | 3 |
威廉·莎士比亚 | 2 |
米格尔·德·塞万提斯 | 1 |
赫尔曼梅尔维尔 | 1 |
史蒂芬·金 | 0 |
马克·吐温 | 0 |