2011-10-14 70 views
0

這裏是我的表是這樣的:看似簡單的MySQL查詢

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,我知道如何獲得這個名字。

回答

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   | 

... 
+0

中的第二列是,但代價是可讀性。但是,對於某些情況很好。 –

1

您不需要使用子查詢,你可以做這樣的事情:

SELECT authorID FROM book GROUP BY authorID ORDER BY COUNT(*) DESC LIMIT 1

這應該給你作者的AUTHORID最書籍。

+0

真棒。謝謝! – PFranchise

+0

注意,也可以直接返回作者姓名@Sparky解決方案,如果這是你想要的。 –

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 
+0

什麼是'按2順序'? 2只是第二個返回值? – PFranchise

+0

數字2表示結果集 – Sparky