sql - 使用 IN 条件选择行并分组
问题描述
我有下表,其中存储了建议 ID 和目标 ID
id|goal_id|suggestion_id
1 | 12| 1
2 | 13| 2
2 | 17| 2
3 | 14| 1
4 | 15| 3
5 | 16| 3
6 | 12| 4
6 | 18| 4
我想查询建议 ID 以获得特定的目标 ID 组合。
例如:
- goal_id(13, 17) => 我需要建议 id: 2
- goal_id(12, 14) => 我需要建议 id: 1
- goal_id(14, 12) => 我需要建议 id: 1
- goal_id(12, 18) => 我需要建议 id: 4
甚至可以通过这种方式查询suggest_id,还是我必须重新设计我的表?(我正在使用 PostgreSQL 数据库)
INPUT: (12, 14) 或 (14, 12) id 的顺序可能会改变
select suggestion_id from table WHERE goal_id IN(12, 14) group by suggestion_id
查询返回以下 id:1,1,4
解决方案
WHERE
子句适用于单个行,而不是组。
IN
本质上是WHERE goal_id = 12 OR goal_id = 14
你需要的是第二个过滤器,上面写着but only groups which have Both of these
select suggestion_id
from table
where goal_id IN (12, 14)
group by suggestion_id
having count(distinct goal_id) = 2
该HAVING
子句在聚合到组后应用。所以,现在我们可以计算组中有多少不同的目标,并且只保留恰好有 2 个不同目标的组。
distinct
以防万一一个人suggestion_id
可以多次与goal_id
它相关联。
注意:如果您的IN()
列表有 2 个以上的项目,您也需要更新= 2
。
推荐阅读
- pandas - 如何解开熊猫数据框以获取计数
- javascript - PackBits 算法的实现
- css - 如何结合双色调效果和 CSS mix-blend-mode:difference
- django - 限制用户获取或更新特定用户 django 制作的对象
- swift - 难以自动布局(ImageView 中的 stackView)
- dataframe - 是否可以编写一个将函数名作为参数并将其应用于数据帧的包装类?
- k-means - 剪影分数怎么可能是负数?
- javascript - ReactJS 无效的 Hook 调用
- python - 在每列上对具有不同阈值的 numpy 数组进行阈值处理
- ios - 由于 Firebase GoogleService-Info.plist,Codemagic iOS 构建失败