#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть 3 таблицы, как описано ниже:
Все три таблицы и выводимое изображение
post_comments публикует комментарии
комментарии comments
Теперь я хочу получить сообщения с наибольшим количеством понравившихся комментариев, и статус этого комментария должен быть активным в Postgres.
ВЫВОД:
публикует результирующие записи
ПРИМЕЧАНИЕ: Поскольку для сообщения 1 комментарий с наибольшим лайком неактивен.
Я пробовал что-то вроде этого:
select "posts".*
from "posts"
inner join (select id, max(likes) l from comments innner join post_comments on comments.id = post_comments.alert_id and post_comments.post_id = posts.id) a on posts.id = a.cid ...
Это не завершено, но я не могу этого сделать.
Комментарии:
1. Примеры данных и желаемые результаты помогли бы.
Ответ №1:
В Postgres вы можете получить активный комментарий с наибольшим количеством лайков для каждого поста, используя distinct on
:
select distinct on (pc.post_id) pc.*
from post_comments pc join
comments c
on pc.comment_id = c.id
where c.status = 'active'
order by pc.post_id, c.likes desc;
Я думаю, что это вполне связано с тем, что вы хотите.
Ответ №2:
Попробуйте что-то вроде этого:
SELECT posts.*, MAX(likes) l
FROM posts
JOIN post_comments ON post_id = posts.id
LEFT JOIN comments ON comment_id = comments.id
GROUP BY posts.id