我正在建立图书馆数据库。我想编写一个查询,该查询返回每个类别的前5本图书,这意味着它必须返回每种类别中借用次数最多的5本书,以及它们被借阅的次数。
查询涉及以下表格:
图书(ISBN,书名,pubYear,numpages,pubName)
借入(会员ID,ISBN,copyNr,借入日期,返回日期)
属于(ISBN,类别名称)
我的方法如下:
SELECT *
FROM(SELECT book.title, count(bo.ISBN) as Number_of_times_book_is_taken ,be.categoryName
FROM belong_to as be INNER JOIN borrows as bo ON be.ISBN = bo.ISBN INNER JOIN book ON bo.ISBN = book.ISBN
GROUP BY bo.ISBN
ORDER BY count(bo.ISBN) DESC) AS Popular
ORDER BY categoryName, Number_of_times_book_is_taken DESC
如果我想返回书籍的标题,书籍的使用次数以及它们所属的类别,我认为这样做很好。
但是,我想限制结果,以便每个类别只能获得5本书。如果使用LIMIT 5
,我将限制整个结果,这不是我想要的。我试图限制每个categoryNames最多显示5次。
答案 0 :(得分:0)
在mysql 8.0+版本中,您可以使用row_number()
with cte as
(
SELECT book.title, count(bo.ISBN) as Number_of_times_book_is_taken ,
be.categoryName,
row_number() over(partition by be.categoryName order by count(bo.ISBN) desc) rn
FROM belong_to as be INNER JOIN borrows as bo
ON be.ISBN = bo.ISBN INNER JOIN book ON bo.ISBN = book.ISBN
GROUP BY be.categoryName,book.title
) select * from cte where rn<=5
答案 1 :(得分:0)
使用功能行号,按类别划分。 然后 选择 * 从 (查询)作为测试 行号<= 5
请参阅以下链接。