Mysql group by将空格作为相同的值包含在内
我有这张桌子Mysql group by将空格作为相同的值包含在内,mysql,sql,string,group-by,count,Mysql,Sql,String,Group By,Count,我有这张桌子 CREATE TABLE table1 ( `ID` VARCHAR(100), `Val` VARCHAR(100), `Val2` VARCHAR(100) ); 这个值呢 INSERT INTO table1 (`ID`, `Val`, `Val2`) VALUES ('1','1234 ','now'), // 1 whitespace ('2','1234 ','now1'), // 2 whitespace ('5','1234 ',
CREATE TABLE table1 (
`ID` VARCHAR(100),
`Val` VARCHAR(100),
`Val2` VARCHAR(100)
);
这个值呢
INSERT INTO table1
(`ID`, `Val`, `Val2`)
VALUES
('1','1234 ','now'), // 1 whitespace
('2','1234 ','now1'), // 2 whitespace
('5','1234 ','now190'), // 2 whitespace
('3','1234 ','now2'), // 3 whitespace
('4','3123123','now3')
我需要按数据分组并计算有多少数据具有相同的值,因此我使用了groupby
和count
select Val,count(*) from `table1` group by Val
结果与我期望的不同,因为ID 1、2、5和3的数据被计算为与下面结果相同的值
Val count(*)
1234 4
3123123 1
我如何使结果与下面的预期结果相同,从而使该值不计算为相同的值
Val count(*)
1234 1 // 1 whitespace
1234 2 // 2 whitespace
1234 1 // 3 whitespace
3123123 1
查看此提琴,了解这正是MySQL在默认情况下的工作方式,除非您使用特定的排序规则。典型的解决方法是使用
二进制
:
select binary val, count(*) cnt from table1 group by binary val
或者,如果您确实希望在结果集中使用常规字符串而不是二进制字符串:
select max(val) as newval, count(*) cnt from table1 group by binary val
等等,让我先检查一下,如果VARCHAR列保留了尾随空格(我现在指尖没有db),您可以尝试“group by val | |'”。这样尾随空格在group by中的隐式修剪()或填充后仍然有效。您可以将val显示为“| | val | |””,以便识别尾随空格。在任何数据设计中,我都不喜欢尾随空格或null@戴维格。皮克特至少尾随空格比领先要好得多:-)@Gagantous:这是你的@Gagantous:好的,这不是小提琴上显示的。有关解决方案,请参见答案中的“我的编辑”。