用大多数书来计算作者的SQL

时间:2016-07-07 16:46:47

标签: sql sqlite select join count

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

如何找到账簿数量最多的作者?

这是我的架构:

  

图书:rowid,名称

     

作者:rowid,name

     

book_authors :rowid,book_id,author_id

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

SELECT count(*) IN book_authors 
WHERE (SELECT count(*) IN book_authors 
       WHERE author_id = author_id)

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

 author_name      book_count
 -----------------------------------
 Johnny           25
 Kelly            12
 Ramboz           10

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

2 个答案:

答案 0 :(得分:3)

我将加入三个表(通过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

编辑:
实际上,我们没有使用来自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

答案 1 :(得分:1)

你不能

select count(1) , Author_ID from Book_Authors group by Author_ID order by count(1) desc limit 100

拥有最多书籍的作者将位于顶部(或者至少是author_ID)

至于限制前100名...然后添加限制条款Sqlite LIMIT / OFFSET query