gpt4 book ai didi

MySQL 如何将列的值加在一起并删除重复的行?

转载 作者:可可西里 更新时间:2023-11-01 07:30:55 24 4
gpt4 key购买 nike

你好,

我有一个 MySQL 表,其中有一些重复行,在将重复行中的一列的值添加到原始行时必须删除这些行。

问题是在另一列的值错误时引起的,现在已修复,但它使余额拆分在不同的行中,这些行必须加在一起。然后必须删除添加的较新行。

在此示例中,userid 列确定它们是否重复(或一式三份)。用户 ID 6 重复,用户 ID 3 重复三次。

作为用户 ID 3 的示例,它必须将第 3、11 和 13 行的所有余额相加,并将该总数放入第 3 行,然后删除第 11 和 13 行。这两列的余额列必须是一起添加到原始的较低 ID 行中,必须删除较新的较高 ID 行。

ID | balance | userid
---------------------
1 | 10 | 1
2 | 15 | 2
3 | 300 | 3
4 | 80 | 4
5 | 0 | 5
6 | 65 | 6
7 | 178 | 7
8 | 201 | 8
9 | 92 | 9
10 | 0 | 10
11 | 140 | 3
12 | 46 | 6
13 | 30 | 3

我希望这已经够清楚了,并且我已经提供了足够的信息。谢谢 =)

最佳答案

两个步骤。

<强>1。更新:

    UPDATE 
tableX AS t
JOIN
( SELECT userid
, MIN(id) AS min_id
, SUM(balance) AS sum_balance
FROM tableX
GROUP BY userid
) AS c
ON t.userid = c.userid
SET
t.balance = CASE WHEN t.id = c.min_id
THEN c.sum_balance
ELSE 0
END ;

<强>2。删除多余的行:

    DELETE t
FROM
tableX AS t
JOIN
( SELECT userid
, MIN(id) AS min_id
FROM tableX
GROUP BY userid
) AS c
ON t.userid = c.userid
AND t.id > c.min_id
WHERE
t.balance = 0 ;

一旦你解决了这个问题,最好在 userid 上添加一个 UNIQUE 约束,因为你似乎想在这里存储每个用户的余额。这将避免将来出现任何重复。您还可以删除(无用的?)id 列。

关于MySQL 如何将列的值加在一起并删除重复的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762003/

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