You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:37:43