Ограничить определенный атрибут в запросе SQL - PullRequest
0 голосов
/ 23 мая 2019

Я строю библиотечную базу данных.Я хочу написать запрос, который возвращает 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 раз.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Используйте функцию Номер строки, Разделение по категориям. затем Выбрать * от (Запрос) как тест Где Rownumber <= 5 </p>

См. Ссылку ниже.

Как вернуть добавочный номер группы для каждой группы в SQL

0 голосов
/ 23 мая 2019

в версии 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...