gpt4 book ai didi

mysql - 合并 MySQL 中的重复行

转载 作者:行者123 更新时间:2023-11-29 02:10:43 24 4
gpt4 key购买 nike

我有这样一个数据库:

users
id name email phone
1 bill bill@fakeemail.com
2 bill bill@fakeemail.com 123456789
3 susan susan@fakeemail.com
4 john john@fakeemail.com 123456789
5 john john@fakeemail.com 987654321

我想根据电子邮件字段合并被认为重复的记录。

试图找出如何使用以下注意事项。

  1. 根据重复的电子邮件合并
  2. 如果一行有空值,则使用数据最多的行。
  3. 如果 2 行重复但其他字段不同,则使用一个

具有最高的 ID 号(例如,请参阅 john@fakeemail.com 行。)

这是我试过的查询:

DELETE FROM users WHERE users.id NOT IN 
(SELECT grouped.id FROM (SELECT DISTINCT ON (email) * FROM users) AS grouped)

出现语法错误。

我试图让数据库转换成这个,我无法找出正确的查询:

users
id name email phone
2 bill bill@fakeemail.com 123456789
3 susan susan@fakeemail.com
5 john john@fakeemail.com 987654321

最佳答案

这是一个使用删除连接的选项:

DELETE
FROM users
WHERE id NOT IN (SELECT id
FROM (
SELECT CASE WHEN COUNT(*) = 1
THEN MAX(id)
ELSE MAX(CASE WHEN phone IS NOT NULL THEN id END) END AS id
FROM users
GROUP BY email) t);

这个delete的逻辑如下:

  • 只有一条记录的邮件不会被删除
  • 对于包含两条或更多条记录的电子邮件,我们删除除具有最高 id 值的记录以外的所有内容,其中还定义了电话。

关于mysql - 合并 MySQL 中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53474219/

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