首页 > 解决方案 > SQL:跨组识别项目重复项

问题描述

我希望在不同的 ID 组中找到重复项。

Dup 变量定义项目是否在其他 ID 组中重新出现。换句话说,如果在另一个 ID 中找到相同的项目,则 Dup 为“是”。如果项目仅在同一 ID 内重复,则 Dup 为“否”。

结果将如下所示:

表格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 查询来检测重复项(我在 hive 环境中工作,但大多数语法应该相似)?任何帮助将不胜感激!

标签: sqlhivehqlhiveql

解决方案


您可以像这样使用窗口函数:

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;

推荐阅读