SQL:确定组之间的项目重复项

问题描述

我希望在ID组之间找到重复项。

Dup变量定义一个项目是否已在其他ID组中重新出现。换句话说,如果在另一个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  |
+----+--------+-----+

我应该如何构造一个SQL查询来检测重复项(我在蜂巢环境中工作,但是大多数语法应该相似)? 任何帮助将不胜感激!

解决方法

您可以使用如下窗口功能:

select t.*,(case when min(id) over (partition by item) = max(id) over (partition by item)
             then 'no' else 'yes'
        end) as dups
from t;