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

如何在SQL中对两表连接结果添加条件列并分组聚合?

满足需求的SQL实现方案

没问题,我帮你整理出符合要求的SQL语句,同时拆解关键逻辑:

完整SQL代码

SELECT 
    L.LSCRV,
    CASE WHEN C.POSIC_ACTUAL = '10' THEN 1 ELSE 0 END AS CONDITION,
    COALESCE(SUM(C.IMP_CMA), 0) AS IMP,
    COALESCE(SUM(C.LIMIT), 0) AS LIM,
    COUNT(*) AS Clients
FROM ADC.RV L 
LEFT JOIN ADC.CCB C 
    ON SUBSTR(L.CLIENT, 1, 12) = C.CLIENT
GROUP BY 
    L.LSCRV,
    CASE WHEN C.POSIC_ACTUAL = '10' THEN 1 ELSE 0 END

关键步骤说明

  • 保留左连接逻辑:原SQL的左连接关联条件SUBSTR(L.CLIENT, 1, 12) = C.CLIENT完全保留,确保ADC.RV表的所有行都能被纳入结果,即使ADC.CCB中没有匹配记录。
  • 添加CONDITION列:通过CASE WHEN判断C.POSIC_ACTUAL是否等于'10',满足则返回1,否则返回0;如果C.POSIC_ACTUAL为NULL(左连接无匹配时),也会返回0。
  • 分组聚合:
    • 按照LSCRV和CONDITION分组,这是SQL分组的基础要求——所有非聚合列必须出现在GROUP BY中(部分数据库支持直接用别名,比如MySQL,但为了兼容性,建议重复CASE表达式)。
    • 用SUM()对IMP_CMA和LIMIT求和,这里加了COALESCE()函数,确保无匹配时求和结果显示为0而非NULL,更符合业务预期。
    • COUNT(*)统计分组内的所有记录数,包含左连接无匹配的行;如果只需要统计有ADC.CCB匹配的客户数,可以替换为COUNT(C.CLIENT)(NULL值不会被计数)。

补充简化方案

如果你的数据库支持列别名在GROUP BY中使用(比如PostgreSQL 12+、MySQL),GROUP BY部分可以简化为:

GROUP BY L.LSCRV, CONDITION

这样代码更简洁,但兼容性稍差,根据你的数据库类型选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:55:37