PostgreSQL如何查询列1唯一值对应多不同列2值的记录
PostgreSQL:返回列1对应多种列2值的所有记录
需求明确:从表中找出所有记录,要求这些记录的column1值对应至少两个不同的column2值。比如示例里column1=1对应column2的1和2,这两条都要返回;而column1=2只对应column2=1,就直接排除。
方案一:分组筛选+关联查询
先通过子查询找出符合条件的column1值,再关联原表获取完整记录:
SELECT t1.column1, t1.column2 FROM table1 t1 JOIN ( -- 筛选出关联多个不同column2值的column1 SELECT column1 FROM table1 GROUP BY column1 HAVING COUNT(DISTINCT column2) > 1 ) t2 ON t1.column1 = t2.column1;
方案二:窗口函数实现
用窗口函数直接计算每个column1分组内的不同column2数量,再筛选结果:
SELECT column1, column2 FROM ( SELECT column1, column2, -- 按column1分组,统计组内不同column2的数量 COUNT(DISTINCT column2) OVER (PARTITION BY column1) AS distinct_col2_count FROM table1 ) sub_query WHERE distinct_col2_count > 1;
逻辑说明
你提到的select distinct (column2, column1) my_distinct from table1;是用于获取去重后的(column2,column1)组合,而上面的方案是反向逻辑:专门定位那些column1对应多种column2值的原始记录,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者convolution
相关产品推荐
相关产品推荐

