PostgreSQL:提取另一列同时匹配两个值的列数据
PostgreSQL查询:提取Col1中对应Col2同时包含A和B的值
问题描述
需要编写PostgreSQL查询语句,从表中提取Col1的所有值,要求这些值在Col2中同时匹配值'A'和'B'。
示例数据
Col1 Col2 123 A 456 B 234 A 456 A 098 A 567 B 567 A
期望结果
Result 456 567
解决方案
方法1:使用GROUP BY + HAVING
这种方法通过分组后统计不同Col2值的数量来筛选符合条件的Col1:
SELECT Col1 FROM your_table WHERE Col2 IN ('A', 'B') GROUP BY Col1 HAVING COUNT(DISTINCT Col2) = 2;
- 逻辑:先用
WHERE过滤出Col2为'A'或'B'的行,再按Col1分组,最后通过HAVING确保每个分组包含两种不同的Col2值(即同时有'A'和'B')。
方法2:使用INTERSECT
通过求两个查询结果的交集来得到同时存在'A'和'B'的Col1:
SELECT Col1 FROM your_table WHERE Col2 = 'A' INTERSECT SELECT Col1 FROM your_table WHERE Col2 = 'B';
- 逻辑:第一个查询获取所有
Col2为'A'的Col1,第二个查询获取所有Col2为'B'的Col1,INTERSECT会返回两个集合的共同值,也就是同时满足两种条件的Col1。
两种方法都能得到期望的结果,可根据实际表数据量和需求选择合适的方式。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

