以下是我的表格:
CREATE TABLE Author(
authorID INT PRIMARY KEY,
name VARCHAR(30)
);
CREATE TABLE book(
ISBN INT PRIMARY KEY,
title VARCHAR(30),
authorID INT,
inventory INT,
paperBack BOOLEAN,
fiction BOOLEAN,
FOREIGN KEY (authorID) REFERENCES Author(authorID)
);
我需要找出哪位作者写了最多的书 我正在使用以下混合物。我想我在拼凑它们时遇到了麻烦......
SELECT authorID, count(*)
from book
group by authorID;
我不知道如何获得具有最高计数的单行,然后只获取该行的authorID。一旦我拥有该authorID,我知道如何获得该名称。
答案 0 :(得分:2)
试试这个:
select a.name,count(*)
from author a
join book b on b.authorID=a.authorID
group by a.Name
order by 2 desc
limit 1
答案 1 :(得分:1)
您不需要使用子查询,您可以执行以下操作:
SELECT authorID FROM book GROUP BY authorID ORDER BY COUNT(*) DESC LIMIT 1
这应该给你最多书籍作者的作者ID。
答案 2 :(得分:1)
如果你想要的只是作者的ID,那么就像其他人指出的那样使用ORDER BY
和LIMIT 1
。但是,如果您对多个作者感兴趣(第二高计数,最低计数等),您将需要来自作者,或的其他字段,那么您应该考虑加入派生表,像这样:
SELECT Author.*, d1.book_count
FROM Author
JOIN (SELECT authorID, count(authorID) as book_count FROM book GROUP BY authorID) d1
ON Author.authorID = d1.authorID
ORDER BY
d1.book_count
会给出这样的结果集:
+----------------------------------+
| AuthorID | Name | book_count |
+----------------------------------+
| 1 | bob | 20 |
| 9001 | sam | 18 |
...