抱歉,如果这是重复的,但我很难找到确切的答案.
我有一个表格,其中包含“电子邮件”(Varchar)和“点击”(Int)。
电子邮件字段包含电子邮件值的重复实例。我想删除重复的,只保留一个实例,但也求和在‘点击’中找到的所有值,为给定的电子邮件实例,并更新其余的记录,以反映这一点。
我可以使用不同的和组的方法来查看我想要的记录,这是我遇到的总和和更新部分。
谢谢。
发布于 2016-08-18 15:30:41
我不认为您需要在这里使用DISTINCT,而是可以对每个email值进行分组,在执行过程中取点击的总和:
SELECT email, SUM(clicks) AS clickSum
FROM yourTable
GROUP BY email当您提到“剩余”记录时,您忽略了如何删除重复的记录。有选择地删除除一条重复记录之外的所有记录将是一堆工作。我可以这样做,只需将上述查询插入新表,删除旧表,并将新表重命名为旧表:
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发布于 2016-08-18 15:32:22
只更新电子邮件与更多的点击。
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
DELETE yourTable a
LEFT JOIN yourTable b
ON a.clicks > b.clicks
WHERE b.clicks is NOT NULL编辑
我刚意识到你可以用相同的点击次数有两行。这就是为什么您应该始终有一个ID列作为PK。
所以你可以添加以消除任何重复。
ALTER IGNORE TABLE yourTable
ADD UNIQUE INDEX idx_clicks (email, clicks);https://stackoverflow.com/questions/39022069
复制相似问题