3

我有这两个实体及其属性:

book - book_id、book_name、author_id、editor_id、subject_id、isbn

作者 - author_id、fn、ln

我必须查询具有最多行数的作者,这里是属性和实体:

| book_id | 书名 | 作者_id | editor_id | 伊斯本 |
-------------------------------------------------- ------------
| 1 | Book1 标题 | 作者1 | 编辑1 | 8000-9000 |
| 2 | Book2 标题 | 作者2 | 编辑1 | 8000-9001 |
| 1 | Book1 标题 | 作者1 | 编辑1 | 8000-9002 |
| 3 | Book2 标题 | 作者2 | 编辑1 | 8000-9003 |
| 作者_id | fn | ln |
---------------------------------
| 1 | 名称1 | lname1 |
| 2 | 名称2 | lname2 |
| 3 | 名称3 | lname3 |

这是我的代码:

SELECT author.author_id, author.fn, author.ln, COUNT(DISTINCT book.editor_id) as num
FROM `editor`, `book`
GROUP BY `editor_id`
LIMIT 0,1

但偏偏我没有得到我想要的。输出必须是:

| 作者_id | fn | ln |
---------------------------------
| 1 | 名称1 | lname1 |

因为“author_id = 1”在书籍上有 2 个条目。

4

1 回答 1

7

试试这个,但请注意我将author_idfrom转换varcharint):

SELECT book_count,a.author_id,a.fn, a.ln 
FROM author a
JOIN
(
  SELECT c.author_id,COUNT(*) book_count FROM book c
  GROUP BY c.author_id
) b 
ON a.author_id = b.author_id
ORDER BY book_count DESC LIMIT 1

这是SQLFiddle

于 2013-08-05T03:20:32.340 回答