Добрый день!
Есть сущность поста post
id | body ....
и много-к-одному связанная сущность лайков-дизлайков
id | post_id | direction .....
Поле direction хранить enum с @Enumerated(EnumType.STRING), то есть содержит два возможных строковых значения 'UP' или 'DOWN'
Нужно сделать выборку постов, упорядоченную по рейтингу, который рассчитывается условно как count(UP) - count(DOWN)
То есть что-то типа
select p, ( count(***) - count(***) ) as post_rate
from Post p join Vote v on p.id = v.post.id
group by p.id order by post_rate desc
, только опыта/знаний написать подобный запрос у меня не хватает. И несмотря на то, что задача типовая, в общем-то, нагуглить ничего не сумел.
Было бы значительно проще, если бы вместо 'UP' и 'DOWN' были 1 и -1, можно было бы sum() обойтись, но модель БД уже давно сформирована.
Пожалуйста, подскажите, как решить задачу. Может есть ссылка на подобные задачи. Спасибо!