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

求助:含Group By与Case When的姓名处理SQL执行异常

问题排查与修正

核心错误点

  • CASE逻辑完全偏离需求:
    你当前的CASE语句逻辑是首字母为X时取前2个字符,否则取首字符,这和你要求的「首字母为X取第2-3个字符,否则去掉首字符」完全相反。
  • GROUP BY与SELECT字段不匹配:
    SELECT中Initailname是CASE计算的结果,但GROUP BY用的是SUBSTRING(name,1,1),两者逻辑不一致,会触发数据库的分组校验错误。
  • 销售额字段引用错误:
    表中销售额字段是sale amount(带空格),直接写SUM(sale)会被数据库解析为两个字段,导致语法错误。

修正后的SQL语句

通用版本(适配MySQL、SQL Server等多数数据库)

SELECT
    Date, 
    phone_number, 
    SUM(`sale amount`) AS total_sale, -- 带空格的字段需用反引号/方括号包裹
    CASE 
        WHEN SUBSTRING(name, 1, 1) = 'X' 
            THEN SUBSTRING(name, 2, 2) -- 从第2位开始取2个字符(即第2-3位)
            ELSE SUBSTRING(name, 2) -- 去掉首字符,取从第2位开始的所有字符
    END AS Initialname
FROM
    table_1 
GROUP BY
    Date, 
    phone_number, 
    -- GROUP BY需与SELECT中的Initialname逻辑完全一致
    CASE 
        WHEN SUBSTRING(name, 1, 1) = 'X' 
            THEN SUBSTRING(name, 2, 2) 
            ELSE SUBSTRING(name, 2) 
    END

补充:不同数据库的细节差异

  • MySQL:SUBSTRING(name, 2) 或 SUBSTR(name, 2) 均可表示从第2位取到末尾
  • SQL Server:若要去掉首字符,也可使用STUFF(name, 1, 1, '')替代SUBSTRING(name, 2, LEN(name)-1)

内容的提问来源于stack exchange,提问作者Razieh Delavar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:05:07