SQL GROUP BY忽略大小写及末尾字母/后缀的分组统计问题
解决GROUP BY时忽略大小写与末尾复数后缀的统计问题
嘿,我完全懂你的困扰——分组统计的时候,apple和apples因为一个带s被当成了不同类别,加上大小写的差异,统计结果根本不符合预期对吧?别担心,这就给你几个实用的解决方案:
方案一:快速处理大小写+s结尾的复数(适合大多数简单场景)
我们可以通过字符串函数先统一字段的大小写,再去掉末尾多余的s,然后基于处理后的值来分组统计。
以MySQL为例:
SELECT TRIM(TRAILING 's' FROM LOWER(category)) AS normalized_category, COUNT(*) AS row_count FROM your_table_name GROUP BY normalized_category;
关键函数说明:
LOWER(category):把category里的内容全部转成小写,这样Apple、APPLE都会变成apple,彻底解决大小写问题TRIM(TRAILING 's' FROM ...):自动移除字符串末尾的s,让apples直接变成apple- 最后用处理后的
normalized_category分组,就能把同属一类的内容归到一起了
如果用的是PostgreSQL,语法稍微调整下,用RTRIM()来移除末尾的s:
SELECT RTRIM(LOWER(category), 's') AS normalized_category, COUNT(*) AS row_count FROM your_table_name GROUP BY normalized_category;
方案二:处理不规则复数(精准归类)
要是你遇到的还有像potato/potatoes这种不规则复数,上面的方法就不太够用了。这时候可以用CASE语句手动定义归类规则,精准度拉满:
SELECT CASE WHEN LOWER(category) IN ('apples', 'apple') THEN 'apple' WHEN LOWER(category) IN ('potatoes', 'potato') THEN 'potato' -- 这里可以继续添加更多你需要的归类规则 ELSE LOWER(category) END AS normalized_category, COUNT(*) AS row_count FROM your_table_name GROUP BY normalized_category;
这种方法虽然需要手动维护规则,但胜在能应对各种复杂的复数场景,统计结果更准确。
效果验证
用上面的任意一种方法,就能把apple、apples、Apple这类本该同属一类的内容合并统计,不会再出现拆分的情况啦!
内容的提问来源于stack exchange,提问作者Sana
相关产品推荐
相关产品推荐

