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

如何在SQL的CASE语句中对不同列值进行求和?——客户表组合产品消费总额计算需求及示例SQL求助

解决SQL中产品组合消费总额计算的问题

我来帮你搞定这个需求,先说说你当前查询里的几个小问题,再给你调整出正确的写法~

先看原查询的问题

  1. 聚合函数的位置不对:你把SUM()放在了CASE语句里面,而且没有加GROUP BY EmailAddress,这样会导致整个表被聚合为一行,而不是按每个客户单独计算。
  2. 别名写错了:第三个组合的别名应该是Movies_Games,你写成了Books_Music,和实际组合不匹配。
  3. 逻辑顺序问题:如果你的表是每个客户一行,其实不需要用SUM(),直接对列进行加减操作就可以了;如果是多行为同一客户的消费记录,才需要先聚合再计算。

根据需求的两种正确写法

场景1:每个客户在表中只有一行记录

如果你的Customers表中每个EmailAddress唯一,直接计算对应产品列的和即可。如果需要只统计同时消费了组合内两个产品的客户(比如同时买了Books和Movies才显示总额,否则显示NULL),写法如下:

SELECT 
    EmailAddress,
    CASE 
        WHEN Books > 0 AND Movies > 0 THEN Books + Movies 
        ELSE NULL  -- 要是想没消费的组合显示0,就把NULL改成0
    END AS Books_Movies,
    CASE 
        WHEN Books > 0 AND Games > 0 THEN Books + Games 
        ELSE NULL 
    END AS Books_Games,
    CASE 
        WHEN Movies > 0 AND Games > 0 THEN Movies + Games 
        ELSE NULL 
    END AS Movies_Games
FROM Customers;

如果不管是否同时消费,都要计算组合的总额(比如只买了Books的话,Books_Movies就是Books的金额),那连CASE都可以不用,直接写:

SELECT 
    EmailAddress,
    Books + Movies AS Books_Movies,
    Books + Games AS Books_Games,
    Movies + Games AS Movies_Games
FROM Customers;

场景2:同一客户有多条消费记录

如果表中一个客户对应多行数据,需要先按EmailAddress分组,聚合每个产品的总消费,再判断组合情况:

SELECT 
    EmailAddress,
    CASE 
        WHEN SUM(Books) > 0 AND SUM(Movies) > 0 THEN SUM(Books) + SUM(Movies) 
        ELSE NULL 
    END AS Books_Movies,
    CASE 
        WHEN SUM(Books) > 0 AND SUM(Games) > 0 THEN SUM(Books) + SUM(Games) 
        ELSE NULL 
    END AS Books_Games,
    CASE 
        WHEN SUM(Movies) > 0 AND SUM(Games) > 0 THEN SUM(Movies) + SUM(Games) 
        ELSE NULL 
    END AS Movies_Games
FROM Customers
GROUP BY EmailAddress;

关于CASE语句中列求和的要点

  • 单行场景:直接在CASE的THEN子句里把需要的列相加就行,不需要SUM,因为是针对当前行的计算。
  • 多行聚合场景:要先对单个列用SUM聚合出总额,再在CASE里把聚合后的结果相加,而不是把SUM嵌套在CASE里(原查询的问题就出在这里,嵌套的话只会聚合满足CASE条件的行,不是所有行的总额)。
  • GROUP BY必须加:使用聚合函数时,所有非聚合的列(比如EmailAddress)都要放在GROUP BY中,否则会得到错误结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:22:45