如何查询表中指定列值仅出现一次的完整数据行?
解决SQL查询仅出现一次的column1对应行问题
现有数据表(假设表名为your_table,注意table是SQL关键字,不能直接作为表名)的数据如下:
column1 column2 A 1 A 2 A 3 B 1 C 1 C 2 D 1
需要筛选出column1值仅出现一次的行,预期结果:
column1 column2 B 1 D 1
你之前的语句select column1 from table group by column1 having count(column1)=1存在两个问题:一是仅查询了column1字段,无法获取对应的column2数据;二是使用了SQL关键字table作为表名,会导致语法错误。
以下是两种可行的解决方案:
方案一:子查询关联原表
先通过子查询统计出所有仅出现一次的column1值,再关联原表获取完整行数据:
SELECT t.column1, t.column2 FROM your_table t INNER JOIN ( SELECT column1 FROM your_table GROUP BY column1 HAVING COUNT(*) = 1 ) AS single_col1 ON t.column1 = single_col1.column1;
方案二:窗口函数筛选(适用于支持窗口函数的数据库)
利用窗口函数直接计算每个column1分组的行数,再筛选出行数为1的记录:
SELECT column1, column2 FROM ( SELECT column1, column2, COUNT(*) OVER (PARTITION BY column1) AS col1_count FROM your_table ) AS temp WHERE col1_count = 1;
内容的提问来源于stack exchange,提问作者Swastik Udupa
相关产品推荐
相关产品推荐

