sql - 如何在 GROUP BY 语句中排除唯一属性
问题描述
如何在 GROUP BY 语句中包含唯一属性。例如,我们有以下表格:
MPD
MPD_ID | DUMMY_ID |
---|---|
1 | 11 |
1 | 44 |
2 | 22 |
2 | 33 |
假
DUMMY_ID | NUMBER_ID |
---|---|
11 | 1 |
22 | 2 |
33 | 2 |
44 | 1 |
数字
NUMBER_ID | 数字 |
---|---|
1 | 5 |
2 | 6 |
SELECT nr.number, dm.id FROM MPD mpd
JOIN dummy dm on mpd.dummy_id = dm.dummy_id
JOIN number nr on dm.number_id = nr.number_id
WHERE nr.number > 4
GROUP BY nr.number, dm.id
HAVING COUNT(nr.number) > 1;
搜索必须基于父对象 MPD。所以我们想根据它们所连接的 MPD 找到“重复”的 DUMMY 条目。
上面的选择将返回 0 结果,因为 ,dm.dummy_id
对于所有条目都不相同,因此它不会从 GROUP BY 传递,因为 GROUP BY 需要每个条目的所有属性都相等才能对它们进行分组。
如果dm.dummy_id
将被删除,则查询将正常工作,并且它将返回 DUMMY_IDs 11 和 44,因为它们各自的 dm.id 是相等的。但是将丢失有关要找到的条目的 id 的基本信息。
如何使用 group by 和 count 来识别我的重复条目,但在 select 语句中返回 dm.dummy_id?
有没有办法可以在 GROUP BY 中包含一个属性,但不要在 GROUP BY 中考虑?
解决方案
我想你只想要窗口功能:
select t.*
from (select t.*, count(*) over (partition by nr) as cnt_nr
from dummy t
) t
where cnt_nr > 1;
推荐阅读
- r - 根据另一列 R 的条件提取数据框中的一列
- php - bootstrap 5,selectipicker - 显示不正确
- javascript - 如何标记 svg 文件以绘制路线?
- sql - 如何创建存储过程以在 Snowflake 中运行脚本?
- javascript - 库应用程序数组循环 - 无法读取未定义的属性“标题”
- node.js - socket.io cors 错误。我尝试在 laravel vuejs 中连接 socket.io,但出现 cors 错误
- ios - 为集合视图单元设置自动大小计算时出现问题
- swiftui - UIViewControllerRepresentable 中的绑定与 Storyboard
- python - 如何在多进程 Flask 应用程序中初始化 MongoClient?
- sql - 如何检查两列中的字符串值是否也存在于SQL的另一列中