SQL技术问题:如何选取两列值相同的唯一行
解决方法:选取两列值相同的唯一行
嗨,我来帮你搞定这个SQL问题!先把你给出的输入数据表整理成清晰的格式:
| TaskId | member1 | member2 | score | functions |
|---|---|---|---|---|
| 1 | Jack | Jack | 100 | marketing |
| 1 | Jack | Jack | 100 | marketing |
| 2 | Jack | Steve | 90 | interior |
| 2 | Jack | Steve | 90 | interior |
| 3 | Steve | Jack | 70 | program |
| 3 | Steve | Jack | 70 | program |
| 4 | Jack | Mia | 30 | develop |
| 4 | Jack | Mia | 30 | develop |
| 5 | Mia | Jack | 20 | interior |
你的需求是筛选出member1和member2值完全相同的行,并且去掉重复记录,得到唯一的结果,这里有几种简单高效的实现方式:
方法1:使用DISTINCT + WHERE条件
这是最直接的方案,先通过WHERE过滤出两列相等的行,再用DISTINCT去掉完全重复的记录:
SELECT DISTINCT TaskId, member1, member2, score, functions FROM your_table_name WHERE member1 = member2;
效果说明
这条语句会先筛选出所有member1和member2相同的行(也就是TaskId=1的那两行),然后DISTINCT会自动剔除完全重复的条目,最终返回唯一的一行TaskId=1的记录。
方法2:使用GROUP BY分组
如果你的SQL环境支持,也可以用分组的方式实现,原理和DISTINCT类似,通过分组把重复的记录合并成一行:
SELECT TaskId, member1, member2, score, functions FROM your_table_name WHERE member1 = member2 GROUP BY TaskId, member1, member2, score, functions;
方法3:窗口函数(适合复杂去重场景)
如果后续有更复杂的去重需求(比如需要保留特定顺序的行),可以用ROW_NUMBER()窗口函数来标记重复记录,再取每组的第一条:
WITH ranked_tasks AS ( SELECT TaskId, member1, member2, score, functions, -- 按所有列分组,给每组的记录编号 ROW_NUMBER() OVER (PARTITION BY TaskId, member1, member2, score, functions ORDER BY TaskId) AS rn FROM your_table_name WHERE member1 = member2 ) SELECT TaskId, member1, member2, score, functions FROM ranked_tasks WHERE rn = 1;
不管用哪种方法,最终得到的结果都是符合需求的唯一行:
| TaskId | member1 | member2 | score | functions |
|---|---|---|---|---|
| 1 | Jack | Jack | 100 | marketing |
内容的提问来源于stack exchange,提问作者sara
相关产品推荐
相关产品推荐

