Обращаемся ко всем энтузиастам sql! Краткая информация: использование PostgreSQL.
У меня есть запрос, который возвращает максимальное количество лайков для пользователя в каждой категории. Сейчас я хочу показать трех пользователей с наибольшим количеством лайков в каждой категории.
Полезный ресурс использовал этот пример для решения проблемы:
select type, variety, price
from fruits
where (
select count(*) from fruits as f
where f.type = fruits.type and f.price <= fruits.price
) <= 2;
Я понимаю это, но в моем запросе используются объединения, и я тоже новичок, поэтому мне не удалось эффективно использовать эту информацию.
Что касается бизнеса, это мой запрос на получение максимального количества лайков для пользователя по каждой категории.
SELECT category, username, MAX(post_likes) FROM (
SELECT c.name category, u.username username, SUM(p.like_count) post_likes, COUNT(*) post_num
FROM categories c
JOIN topics t ON c.id = t.category_id
JOIN posts p ON t.id = p.topic_id
JOIN users u ON u.id = p.user_id
GROUP BY c.name, u.username) AS leaders
WHERE post_likes > 0
GROUP BY category, username
HAVING MAX(post_likes) >= (SELECT SUM(p.like_count)
FROM categories c
JOIN topics t ON c.id = t.category_id
JOIN posts p ON t.id = p.topic_id
JOIN users u ON u.id = p.user_id WHERE c.name = leaders.category
GROUP BY u.username order by sum desc limit 1)
ORDER BY MAX(post_likes) DESC;
Любая помощь будет принята с благодарностью. Мне трудно осмыслить эту проблему. Благодарить!