合并MySQL中的计数行

时间:2010-06-25 23:00:40

标签: mysql sql sql-update

我在MySQL中有一个类似于:

的表
value | count
-------------
Fred  | 7
FRED  | 1
Roger | 3
roger | 1

也就是说,它是用MySQL之外的字符串操作创建的,所以这些值是大小写和尾随空白敏感的。

我希望它看起来像:

value | count
-------------
Fred  | 8
Roger | 4

即由MySQL管理,value为主键。保留哪一个(“Fred”或“FRED”)并不重要。

我知道如何在代码中执行此操作。我也知道如何生成问题值列表(使用自联接)。但我想提出一个SQL更新/删除来迁移我的表,我想不出任何事情。

如果我知道没有一对记录具有一个值的变体,具有相同的计数(如(“Fred”,4)和(“FRED”,4)),那么我认为我可以用自己做-join复制计数,然后更新以删除零。但我没有这样的保证。

有什么简单的我缺少,或者这是你只是在数据库外编写一个简短函数的情况之一?

谢谢!

2 个答案:

答案 0 :(得分:2)

作为如何使用SQL查询单独获取结果的示例:

SELECT UPPER(value) AS name, SUM(count) AS qty FROM table GROUP BY name;

如果你创建一个新表来保存正确的值,你可以插入上面的查询来填充新表:

INSERT INTO newtable (SELECT UPPER(value) AS name, SUM(count) AS qty FROM table GROUP BY name);

答案 1 :(得分:1)

奇怪的是,MySQL似乎为你做到了这一点。我刚刚在MySQL 5.1.47中对此进行了测试:

create table c (value varchar(10), count int);
insert into c values ('Fred',7), ('FRED',1), ('Roger',3), ('roger',1);

select * from c;

+-------+-------+
| value | count |
+-------+-------+
| Fred  |     7 |
| FRED  |     1 |
| Roger |     3 |
| roger |     1 |
+-------+-------+

select value, sum(count) from c group by value;

+-------+------------+
| value | sum(count) |
+-------+------------+
| Fred  |          8 |
| Roger |          4 |
+-------+------------+

我很惊讶看到MySQL改变了这样的字符串,我不确定我能解释它为什么这样做。我期望得到四个不同的行,并且必须使用一些字符串函数将值映射到规范形式。