我想对按名称和服务器分组的“金额”列求和,并删除重复的行。我希望保存这些更改(不仅仅是一个查询)。
例如,这里是开始数据:
ID | 服务器 | 姓名 | 数量 |
---|---|---|---|
1 | 20 | A | 1 |
2 | 20 | A | 1 |
3 | 30 | 乙 | 2 |
4 | 20 | 乙 | 1 |
5 | 20 | A | 1 |
这就是我想要的:
ID | 服务器 | 姓名 | 数量 |
---|---|---|---|
1 | 20 | A | 3 |
3 | 30 | 乙 | 2 |
4 | 20 | 乙 | 1 |
实际上,我可以这样做:
SELECT SUM(amount) as amount FROM myTable GROUP BY server, name;
但是,我只会获得金额列的值。它不会更新表,也不会删除其他行。
如果我做类似的事情,UPDATE myTable SET amount = (SELECT SUM(amount) as amount FROM myTable WHERE server = myTable.server AND name = myTable.name)
它将不起作用,因为我无法选择更新。
那么,我该怎么办呢?
基本上,您要求从表中删除记录,我希望这是一个单一的过程。
这可以通过将“最终”数据插入临时表、截断现有表,然后将临时表中的数据插入主表来完成。
根据 id 对我来说似乎多余,您可以将其删除并保留其自动增量。
代码
结果
参见示例
请参阅带有新 id-s 的示例