SQL使用group by获取SUM,但有条件地对两列之一的内容求和

Posted

技术标签:

【中文标题】SQL使用group by获取SUM,但有条件地对两列之一的内容求和【英文标题】:SQL Get SUM using group by, but sum contents of one of two columns conditionally 【发布时间】:2021-11-15 10:36:45 【问题描述】:

使用 SQL Server,我需要汇总表中的记录并获得一个总和值。我的问题是我需要根据第三列中的条件对每条记录中两列之一的值求和。

示例:这是一个表格:

Station   Location  Contact ColToSum    AltColToSum ColToUse
Station 1   West    Smith      4             10        1
Station 1   West    Smith      0             10        2
Station 1   West    Smith      2             10        1
Station 1   West    Smith      7             10        1
Station 2   North   Jones      5             10        1
Station 2   North   Jones      0             10        2
Station 2   North   Jones      0             10        2
Station 3   South   Brown      5             10        1
Station 3   South   Brown      0             10        2
Station 3   South   Brown      0             10        2
Station 3   South   Brown      1             10        1

最右边的列包含需要添加到总和的列,ColToSum 或 AltColToSum。如果 ColToUse = 1,则将 ColToSum 值添加到总和中;如果 ColToUse = 2,则将 AltColToSum 添加到 sum。将数据分组以获得摘要,如下所示:

Station 1   West    Smith   23
Station 2   North   Jones   25
Station 3   South   Brown   26

我一直在使用 CASE 语句和 GROUP BY 子句,但似乎无法得到我想要的结果。我也尝试过使用 PARTITION,但我还不是很熟练。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

只使用条件聚合:

select station, location, contact,
       sum(case when coltouse = 1 then coltosum
                when coltouse = 2 then altcoltosum
           end) as sum
from t
group by station, location, contact;

【讨论】:

哎呀,我没有意识到我可以在聚合函数中放置一个案例。这是一个非常简单的解决方案。非常感谢。

以上是关于SQL使用group by获取SUM,但有条件地对两列之一的内容求和的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用group by?

使用 group by 和条件优化 SQL 查询

MySQL 条件 SUM 使用 GROUP BY 和 DISTINCT

SQL Group By以获取列值的计数

关于SQL中两张表联合sum和group by的查询问题

如何在 SQL 中使用 group by 运行 sum?