首页 > 解决方案 > 获得前 5 个最相关的项目

问题描述

我有一个 Postgres 数据库,其中包含一个多对多关联表,类似于下面的内容。

id | item_id | item_tag_id
 1     101       3
 2     102       3
 3     103       1
 4     104       2
 5     105       2

我怎样才能获得前 5 个最相关的item_tag_id

标签: sqlpostgresql

解决方案


基本上,按项目分组并按行数排序(= 正确的多对多设计中的项目数):

SELECT item_id, count(*)
FROM   assoc_tbl
GROUP  BY 1
ORDER  BY 2 DESC
LIMIT  5;

还有一个极端情况:如何打破前 5 名的平局?要么定义标准(导致更多ORDER BY表达式),要么考虑WITH TIES. 看:


推荐阅读