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
→ Ссылка