sql - 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 环境中工作,但大多数语法应该相似)?任何帮助将不胜感激!
解决方案
您可以像这样使用窗口函数:
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;
推荐阅读
- typescript - 如何使用 '!TypeScript 中的“运算符”和“in 运算符”?
- android - 升级到 Delphi v10.2.3 后 Google AdMob TbannerAd LoadAd 异常
- google-sheets - vAxis 上的标题未设置但显示在 hAxis 上
- javascript - AngularJS:对作为对象的 ng-options 进行排序
- android - android studio中的日期选择器验证
- mysql - 2天前mysql查询很好,今天超级慢
- typescript - Primeng 日历:从数据库中设置日期
- math - 从经纬度获取SVG定位X和Y
- ios - 如何在 webview 中自动点击按钮以及如何在 webview 中自动填充表单
- java - 安卓空列表