gpt4 book ai didi

SQL 查找重复项并分配组号

转载 作者:行者123 更新时间:2023-12-05 00:22:25 25 4
gpt4 key购买 nike

情况
在 Microsoft SQL Server 2008 上,我有大约 200 万行。 (这本不应该发生,但我们继承了这种情况)。示例如下:

usernum. |  phone  |  email
1 | 123 | user1@local.com
2 | 123 | user2@local.com
3 | 245 | user3@local.com
4 | 678 | user3@local.com

宗旨
我想创建一个看起来像这样的表。这个想法是,如果“电话”或“电子邮件”相同,则为它们分配相同的组号。
groupnum |usernum. |  phone  |  email
1 | 1 | 123 | user1@local.com
1 | 2 | 123 | user2@local.com
2 | 3 | 245 | user3@local.com
2 | 4 | 678 | user3@local.com

到目前为止尝试过
到目前为止,我已经创建了一个简单的 python 脚本,它在概念上执行以下操作:
- 对于表中的每个用户号
-- 分配组号
-- 还将组号分配给电话或电子邮件与此行相同的所有行
-- 如果 usernum 已经处理,不要分配组号(否则我们会做双倍的事情)
问题
python 脚本基本上必须检查每一行是否有电话或电子邮件的重复项。虽然这对于大约 10,000 条记录来说是完全没问题的,但对于 200 万条记录来说太慢了。我认为这可以在 t-sql 中完成,它应该比我使用 pyodbc 的 python 脚本快得多。因此,最大的问题是,如何在 sql 中执行此操作。

最佳答案

刚注意到你说的是email 手机是重复的。为此,我认为您需要决定在用户​​可以从任一领域加入的情况下哪个优先。或者,您可以将更新分成几批,以根据电话和电子邮件创建组号,然后是电子邮件(尚未匹配时),然后是电话(尚未匹配时),如下所示:

insert into yourGroupsTable (phone, email) -- assuming identity column of groupNum here
select distinct phone, email
from yourUserTable

-- assign group nums with priority on matching phone AND email
update yourUserTable
set groupNum = g.groupNum
from yourUserTable u
join yourGroupsTable g on u.phone = g.phone
and u.email = g.email

现在我突然想到,由于不同的选择,每行都将加入 yourGroupsTable ,因此这将不起作用。我遇到了一个场景,我不确定您的预期结果会是什么(并且太大而无法发表评论) - 在这种情况下会发生什么:

您的测试数据略有修改:
groupnum |usernum. |  phone  |  email
1 | 1 | 123 | user1@local.com
1 | 2 | 123 | user2@local.com
? | 3 | 245 | user3@local.com
? | 4 | 678 | user3@local.com
? | 5 | 245 | user7@local.com
? | 6 | 678 | user7@local.com

在上述情况下,群体 NumPy 是什么?

关于SQL 查找重复项并分配组号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27949145/

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