Я строю библиотечную базу данных.Я хочу написать запрос, который возвращает 5 лучших книг для каждой категории, а это значит, что он должен вернуть 5 книг, которые были взяты в наибольшем количестве раз для каждой из категорий, и количество раз, когда они были заимствованы.
Запрос включает в себя следующие таблицы:
Книга (ISBN, title, pubYear, numpages, pubName)
заимствования (memberID, ISBN, copyNr, date_of_borrowing, date_of_return)
принадлежит_ (ISBN, categoryName)
Мой подход заключается в следующем:
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
, я ограничу весь результат, а это не то, что я хочу.Я пытаюсь ограничить каждое из названий категорий, чтобы они появлялись не более 5 раз.