SQL计算最多书籍的作者

Rob*_*cks 4 sql sqlite select join count

我有一个书籍表、一个作者表和一个“链接器”表(作者/书籍之间的多对多链接)。

如何找到书籍数量最多的作者?

这是我的架构:

书籍:rowid,名称

作者:rowid、姓名

book_authors:rowid、book_id、author_id

这就是我想出的:(但它不起作用)

SELECT count(*) IN book_authors 
WHERE (SELECT count(*) IN book_authors 
       WHERE author_id = author_id)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要一份前 100 位作者的报告,例如:

 author_name      book_count
 -----------------------------------
 Johnny           25
 Kelly            12
 Ramboz           10
Run Code Online (Sandbox Code Playgroud)

我需要某种形式的加入吗?最快的方法是什么?

Mur*_*nik 5

我将连接三个表(通过book_authors表),按作者分组,计算出现次数并将其限制为前 100 行:

SELECT   a.name, COUNT(*)
FROM     authors a
JOIN     books_authors ba ON a.rowid = ba.author_id
JOIN     books b ON ba.book_id = b.rowid
GROUP BY a.name
ORDER BY 2 DESC
LIMIT    100
Run Code Online (Sandbox Code Playgroud)

编辑:
实际上,我们没有使用 中的任何数据books,只是这本书实际存在的事实,可以从 中推断出来books_authors,因此可以通过删除第二个连接来改进此查询:

SELECT   a.name, COUNT(*)
FROM     authors a
JOIN     books_authors ba ON a.rowid = ba.author_id
GROUP BY a.name
ORDER BY 2 DESC
LIMIT    100
Run Code Online (Sandbox Code Playgroud)