Я работаю над небольшим компонентом форума для сайта, и я создаю страницу, где я хочу отображать каждую тему вместе с ее наивысшим рейтингом. Вот то, что таблицы выглядят следующим образом:Как выбрать самый высокий пост для каждой темы и связать их с учетом этой схемы?
POST USER TOPIC
id id id
date name title
text bio date
views
likes
topic_id
author_id
Моего запрос выглядит так:
select
u.id, u.name, u.bio,
p.id, p.date, p.text, p.views, p.likes,
t.id, t.title, t.date
from
(select p.id, max(p.likes) as likes, p.topic_id
from post as p group by p.topic_id) as q
inner join post as p on q.id = p.id
inner join topic as t on t.id = q.topic_id
inner join user as u on u.id = p.author_id
order by date desc;
Одна из проблем, я с работой это жгуты «д». Postgresql не позволит мне запускать запрос «q», потому что он хочет, чтобы «p.id» находился в разделе «group by» или в агрегатной функции. Я попытался использовать «distinct on (p.id)», но я получил такое же сообщение об ошибке: p.id должен появиться в предложении GROUP BY или использоваться в агрегатной функции.
Без атрибута p.id я не могу объективно связать его с другими таблицами; есть ли другой способ сделать это?
что, если их имеют отношения вы хотите и должны быть возвращены или просто 1 в теме? функции окна, такие как DENSE_RANK или ROW_NUMBER, получат то, что вы хотите – Matt