gpt4 book ai didi

SQL Server 查找包含的组

转载 作者:行者123 更新时间:2023-12-03 01:51:08 25 4
gpt4 key购买 nike

我试图仅选择不包含在其他组中的组。

在此示例中,组号 2 包含在组号 1 中,因为组号 1 具有组号 2 的所有值。

组号 3 不包含在组号 1 中,因为它的值为 50,而组号 1 不包含该值。

结果应该是第 1 组和第 3 组。

(或相反 - 只获取其他组中包含的组号 2)

寻找一种不循环的方法,因为我有超过 200 万个值。

我的表格如下所示:

group_number    id
-------------------
1 10
1 20
1 30
1 40
2 10
2 40
3 10
3 30
3 50

最佳答案

我已经使用您提供的数据集进行了测试,并且它有效。第一个,不包含在另一个组中的组:

SELECT DISTINCT Group_Number FROM #T
WHERE NOT EXISTS (SELECT Group_Number G2
FROM #T AS T2
WHERE T2.Group_Number <> #t.Group_Number
AND T2.ID = #T.ID)

而且...另一种方法很容易实现:

SELECT DISTINCT Group_Number FROM #T WHERE NOT Group_Number IN (
SELECT DISTINCT Group_Number FROM #T
WHERE NOT EXISTS (SELECT Group_Number G2
FROM #T AS T2
WHERE T2.Group_Number <> #t.Group_Number
AND T2.ID = #T.ID)
)

只是问自己,我意识到我的回答并不完全准确。首先,我意识到添加:

INSERT INTO #t 
VALUES (6, 50),
(7, 60),
(8, 50),
(8, 60)

第 8 组未出现,因为第 6 组中存在一项,而第 7 组中存在另一项。因此,我做了很多检查并得出结论,以下代码是保证结果的代码,并且还提供可追溯性以验证响应是否正确:

SELECT DISTINCT Group_Number FROM 
(
SELECT T1.Group_Number, T1.Rows, T2.Group_Number as Comparing_With_Other_Group, Count(DISTINCT T2.ID) AS Rows_On_Other_Group
FROM (
SELECT Group_Number, Count(DISTINCT ID) AS Rows
FROM #T
GROUP BY Group_Number
) T1
INNER JOIN #T AS T2
ON T1.Group_Number <> T2.Group_Number
AND EXISTS (SELECT 1 FROM #T WHERE #T.Group_Number = T1.Group_Number and #T.ID = T2.ID)
GROUP BY T1.Group_Number, T2.Group_Number, T1.Rows
) SubQry
WHERE Rows = Rows_On_Other_Group

如果您仅运行 SubQry,您将看到可追溯性,而完整查询将向您显示系统可以在其中找到另一个组的组,该组过滤我正在搜索的组中的 ID,找到相同数量的ID。

关于SQL Server 查找包含的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53930982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com