SQL - Запрос. Для каждого жанра найти три книги, количество доступных экземпляров которых максимально
Помогите решить: Для каждого жанра найти три книги, количество доступных экземпляров которых максимально. Если у четвертой и далее книг количество экземпляров такое же, как у третьей, то вывести их всех. Вывести название жанра, название книги, доступное количество экземпляров. Информация должна быть отсортирована по названию жанра в алфавитном порядке, затем по убыванию количества доступных книг и, наконец, по названию книг в алфавитном порядке.
Пояснение В табличном выражении для каждого жанра пронумеруйте книги с помощью оконной функции RANK(). В основном запросе, отберите все книги, ранг которых меньше или равен 3.
Я пробовал составить такой запрос:
select genre_name, title, available_numbers from
(
select genre_name, title, available_numbers, rank() over tab as r
from book
join genre using(genre_id)
window tab as (
PARTITION BY genre_name --, available_numbers
order by genre_name, available_numbers desc, title
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING )
) a
where r <= 3
Ответы (1 шт):
Автор решения: Максим Кан
→ Ссылка
with data AS (
SELECT genre_name, title, available_numbers, rank() OVER w AS 'rank'
FROM book
INNER JOIN genre USING (genre_id)
WINDOW w AS (
PARTITION BY genre_name
ORDER BY available_numbers DESC)
)
SELECT genre_name, title, available_numbers
FROM data
WHERE data.rank <= 3
ORDER BY genre_name, available_numbers DESC, title
