单条SQL实现各条件下Actuals等计算列SUM汇总的方法
单条SQL实现多指标分条件求和方案
完全可以通过单条SQL实现该需求,你提到的三个指标*实际值(Actuals)、预测值(Forecast)、绝对误差(Absolute Error)*的分条件求和,常用实现方式分为两类,可根据你的过滤场景选择:
- 按维度分组的全量聚合:如果是要对每个地点、每个标题维度下的三个指标分别求和,直接用
GROUP BY搭配聚合函数即可,参考语句如下:
SELECT 地点字段, 标题字段, SUM(Actuals) AS 总实际值, SUM(Forecast) AS 总预测值, SUM(`Absolute Error`) AS 总绝对误差 FROM 你的业务表名 -- 此处可添加全局过滤条件,例如 WHERE 统计时间 BETWEEN '2024-01-01' AND '2024-12-31' GROUP BY 地点字段, 标题字段;
- 同维度下多条件分别求和:如果是要在同一行返回满足不同过滤条件的指标求和结果(比如同一个地点下,分别统计上半年、下半年的三个指标汇总值),用条件聚合实现即可,参考语句如下:
SELECT 地点字段, 标题字段, -- 统计满足条件A的指标和 SUM(CASE WHEN 条件A THEN Actuals ELSE 0 END) AS 条件A_总实际值, SUM(CASE WHEN 条件A THEN Forecast ELSE 0 END) AS 条件A_总预测值, SUM(CASE WHEN 条件A THEN `Absolute Error` ELSE 0 END) AS 条件A_总绝对误差, -- 统计满足条件B的指标和 SUM(CASE WHEN 条件B THEN Actuals ELSE 0 END) AS 条件B_总实际值, SUM(CASE WHEN 条件B THEN Forecast ELSE 0 END) AS 条件B_总预测值, SUM(CASE WHEN 条件B THEN `Absolute Error` ELSE 0 END) AS 条件B_总绝对误差 FROM 你的业务表名 GROUP BY 地点字段, 标题字段;
如果绝对误差是你需要实时计算的字段而非表中已存储字段,可直接把计算逻辑放到聚合函数内,例如SUM(ABS(Actuals - Forecast)) AS 总绝对误差,不需要预先定义计算列再求和。
内容的提问来源于stack exchange,提问作者Davidskis
相关产品推荐
相关产品推荐

