看似简单的MYSQL查询

时间:2011-10-14 03:44:27

标签: mysql sql aggregate-functions

以下是我的表格:

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,我知道如何获得该名称。

3 个答案:

答案 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 BYLIMIT 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          |

 ...