问题描述
我希望根据项目在跨组ID中查找重复项,例如:
希望根据ID组中Item的重复项来导出Dup变量。换句话说,如果在另一个ID中找到相同的项,则Dup为“是”。如果项目仅在同一ID中重复,则Dup为“ no”。
表1:
+----+--------+-----+
| ID | Item | Dup |
+----+--------+-----+
| a | apple | yes |
| a | apple | yes |
| b | apple | yes |
| c | orange | no |
| c | orange | no |
| d | pear | yes |
| f | pear | yes |
| e | mango | no |
+----+--------+-----+
我不确定是否首先通过按ID和Item对数据集进行重复数据删除来简化操作。
用于汇总的最终数据集(重复数据删除):
表2
+----+--------+-----+
| ID | Item | Dup |
+----+--------+-----+
| a | apple | yes |
| b | apple | yes |
| c | orange | no |
| d | pear | yes |
| f | pear | yes |
| e | mango | no |
+----+--------+-----+
我应该如何构造一个配置单元查询以检测重复项? 任何帮助将不胜感激!
解决方法
嗯。 。 。如果我理解正确,则可以使用聚合和窗口函数:
select id,item,(case when count(*) over (partition by item) > 1 then 'yes' else 'no' end) as dups
from t
group by id,item;