ここで同様の質問をすべて読みましたが、グループ内で制限を行う方法がわかりません。PSQL doc を読んでも役に立ちませんでした:(次のことを考慮してください。
CREATE TABLE article_relationship
(
article_from INT NOT NULL,
article_to INT NOT NULL,
score INT
);
特定の記事 ID ごとに上位 5 件の関連記事のリストをスコアで並べ替えて取得したいと考えています。
これが私が試したものです:
select DISTINCT o.article_from
from article_relationship o
join lateral (
select i.article_from, i.article_to, i.score from article_relationship i
order by score desc
limit 5
) p on p.article_from = o.article_from
where o.article_from IN (18329382, 61913904, 66538293, 66540477, 66496909)
order by o.article_from;
そして、それは何も返しません。外側のクエリはループのようなものだという印象を受けていたので、そこにはソース ID だけが必要だと思います。
articles
また、列があるテーブルに参加して、関連記事のタイトルを結果セットに取得しid
たい場合はどうすればよいですか?title
内部クエリに結合を追加しました:
select o.id, p.*
from articles o
join lateral (
select a.title, i.article_from, i.article_to, i.score
from article_relationship i
INNER JOIN articles a on a.id = i.article_to
where i.article_from = o.id
order by score desc
limit 5
) p on true
where o.id IN (18329382, 61913904, 66538293, 66540477, 66496909)
order by o.id;
しかし、それはそれを非常に遅くしました。