SELECT count(user_id ) countUser , nomin_id, film_id
FROM votes
GROUP BY film_id , nomin_id
ORDER BY countUser DESC
LIMIT 5;
votes
вложить в другой запрос таблицы votes
и проверять есть ли совпадения двух таблиц WHERE EXISTS()
.select A.*
from
(
select B.*,
row_number() over (partition by B.nomin_id order by B.countUser desc) rwnm -- партишином задаем область счета строк, а сортировкой - порядок счета
from
(
SELECT count(user_id) countUser, nomin_id, film_id
FROM votes
GROUP BY film_id , nomin_id
) B
) A
where rwnm <= 5 -- берем по этому количеству от каждого локального счета
Но всего в таблице 25 000 строк запрос выполняется 30 секунд, а потом крах.
WITH
`counts` AS (
SELECT `film_id`, `nomin_id`, COUNT(*) AS `votes_count`,
FROM `votes`
GROUP BY `nomin_id`, `film_id`
).
`places` AS (
SELECT `film_id`, `nomin_id`, `votes_count`,
ROW_NUMBER() OVER `win` AS `place`
FROM `counts`
WINDOW `win` AS (
PARTITION BY `nomin_id`
ORDER BY `votes_count` DESC
)
)
SELECT `votes_count`, `nomin_id`, `film_id`, `place`
FROM `places`
WHERE `place` <= 5