sql - 获得前 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
?
解决方案
基本上,按项目分组并按行数排序(= 正确的多对多设计中的项目数):
SELECT item_id, count(*)
FROM assoc_tbl
GROUP BY 1
ORDER BY 2 DESC
LIMIT 5;
还有一个极端情况:如何打破前 5 名的平局?要么定义标准(导致更多ORDER BY
表达式),要么考虑WITH TIES
. 看:
推荐阅读
- r - For Loops R:将来自 grep(pattern) 的结果输入到 For 循环中,用于 R 中的多列
- python - 如何在 Kafka 中实现请求-回复(同步)消息传递范式?
- ios - SKProductsRequest 在 SKTestSession 中的 Xcode 版本 12.1 中失败
- google-kubernetes-engine - 在 GKE 上将 GPU 添加到 Kubeflow 集群
- javascript - 带有 id 和密钥的 API 调用
- ios - Firebase FCM 有订阅者限制吗?TOO_MANY_SUBSCRIBERS 错误
- spring-boot - JPA 多对多映射更新问题
- javascript - 为什么 idField 在 angular6 的 ng-multiselect-dropdown 中未定义?
- java - 使用kerberos连接到mongodb时如何修复标识符与预期值不匹配错误?
- python - 请帮助我,我似乎无法修复此错误:ValueError: x and y must have same first dimension, but have shapes (10,) and (1,)