我在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复制计数,然后更新以删除零。但我没有这样的保证。
有什么简单的我缺少,或者这是你只是在数据库外编写一个简短函数的情况之一?
谢谢!
答案 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改变了这样的字符串,我不确定我能解释它为什么这样做。我期望得到四个不同的行,并且必须使用一些字符串函数将值映射到规范形式。