1

我有一个 MySQL 表,其中的行包含text('a''c') 的重复值:

+------+-----+
| text | num |
+------+-----+
| a    |  10 |
| b    |  10 |
| c    |  10 |
| d    |  10 |
| c    |   5 |
| z    |  10 |
| a    |   6 |
+------+-----+

所以,我想更新这些行,对num. 之后,表格应如下所示:

+------+-----+
| text | num |
+------+-----+
| a    |  16 |
| b    |  10 |
| c    |  15 |
| d    |  10 |
| z    |  10 |
+------+-----+

UPD:已编辑的问题。

4

2 回答 2

5

SUM使用带有GROUP BY子句的聚合函数。像这样的东西:

SELECT `text`, SUM(num) AS num
FROM YourTableName
GROUP BY `text`;

SQL 小提琴演示

这会给你:

| TEXT | NUM |
--------------
|    a |  16 |
|    b |  10 |
|    c |  15 |
|    d |  10 |
|    z |  10 |
于 2013-04-05T19:38:12.950 回答
2

您可以创建一个临时表将聚合数据临时存储到其中,然后从中更新原始表。

  1. 创建临时表
  2. 从原始数据中选择聚合数据
  3. 然后删除原表中的所有数据
  4. 然后将临时表中的聚合数据选择到原始表中。

示例 SQL:

BEGIN;
CREATE TEMPORARY TABLE `table_name_tmp` LIKE `table_name`;
INSERT INTO `table_name_tmp` SELECT `text`, SUM(num) AS num FROM `table_name` GROUP BY 1;
DELETE FROM `table_name`;
INSERT INTO `table_name` SELECT * FROM `table_name_tmp`;
-- COMMIT;

我将命令注释掉COMMIT以避免不必要的错误,请在使用前检查结果。

于 2013-04-05T19:59:10.913 回答