如何在Postgres多对多关联表中查询前5个关联最多的item_tag_id
Postgres 多对多关联表查询关联次数最多的前5个item_tag_id方案
假设你的多对多关联表实际表名为item_tag_relation,替换为你自己的表名即可直接使用以下语句:
基础查询方案(取前5条,并列结果会截断)
SELECT item_tag_id, COUNT(*) AS relation_count FROM item_tag_relation GROUP BY item_tag_id ORDER BY relation_count DESC LIMIT 5;
语句说明:
GROUP BY item_tag_id按标签ID分组,将同一个标签的所有关联记录聚合到同一组COUNT(*)统计每个标签对应的关联记录总次数,别名为relation_countORDER BY relation_count DESC按关联次数从高到低排序LIMIT 5仅返回排序后的前5条结果
用你提供的示例数据执行该语句,得到的结果如下:
| item_tag_id | relation_count |
|---|---|
| 3 | 2 |
| 2 | 2 |
| 1 | 1 |
进阶查询方案(保留并列排名的所有结果)
如果第5名存在多个关联次数相同的标签,希望把所有并列的结果都返回,可以使用RANK窗口函数实现:
WITH tag_count_stat AS ( SELECT item_tag_id, COUNT(*) AS relation_count, RANK() OVER (ORDER BY COUNT(*) DESC) AS tag_rank FROM item_tag_relation GROUP BY item_tag_id ) SELECT item_tag_id, relation_count FROM tag_count_stat WHERE tag_rank <= 5;
内容的提问来源于stack exchange,提问作者Waruna
相关产品推荐
相关产品推荐

