首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何求和,然后删除重复字段MySql?

问如何求和,然后删除重复字段MySql?
EN

Stack Overflow用户
提问于 2016-08-18 15:26:54
回答 2查看 1.1K关注 0票数 1

抱歉,如果这是重复的,但我很难找到确切的答案.

我有一个表格,其中包含“电子邮件”(Varchar)和“点击”(Int)。

电子邮件字段包含电子邮件值的重复实例。我想删除重复的,只保留一个实例,但也求和在‘点击’中找到的所有值,为给定的电子邮件实例,并更新其余的记录,以反映这一点。

我可以使用不同的和组的方法来查看我想要的记录,这是我遇到的总和和更新部分。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-18 15:30:41

我不认为您需要在这里使用DISTINCT,而是可以对每个email值进行分组,在执行过程中取点击的总和:

代码语言:javascript
复制
SELECT email, SUM(clicks) AS clickSum
FROM yourTable
GROUP BY email

当您提到“剩余”记录时,您忽略了如何删除重复的记录。有选择地删除除一条重复记录之外的所有记录将是一堆工作。我可以这样做,只需将上述查询插入新表,删除旧表,并将新表重命名为旧表:

代码语言:javascript
复制
CREATE TABLE yourNewTable (`email` varchar(255), `clicks` int);
INSERT INTO yourNewTable (`email`, `clicks`)
SELECT email, SUM(clicks)
FROM yourTable
GROUP BY email

DROP TABLE yourTable
ALTER TABLE yourNewTable RENAME TO yourTable
票数 2
EN

Stack Overflow用户

发布于 2016-08-18 15:32:22

只更新电子邮件与更多的点击。

代码语言:javascript
复制
UPDATE yourTable a 
JOIN (SELECT email, 
             MAX(clicks) as m_clicks, 
             SUM(clicks) as s_clicks
      FROM yourTable
      GROUP BY email) b
  ON a.email = b.email
 AND a.clicks = b.m_clicks
SET a.clicks = b.s_clicks;

然后是DELETE

代码语言:javascript
复制
DELETE yourTable a
LEFT JOIN   yourTable b
       ON   a.clicks > b.clicks
WHERE b.clicks is NOT NULL

编辑

我刚意识到你可以用相同的点击次数有两行。这就是为什么您应该始终有一个ID列作为PK。

所以你可以添加以消除任何重复。

代码语言:javascript
复制
ALTER IGNORE TABLE yourTable
ADD UNIQUE INDEX idx_clicks (email, clicks);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39022069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档