使用SQL对多列中的正值进行聚合的实现方法
用单条SQL实现多列正值的聚合求和
当然可以用单条SQL语句直接实现这个需求,完全不需要创建临时表——而且这种写法对大规模数据集也很友好,因为只需要扫描一次表就能完成所有计算。
核心思路
我们可以把SUM()聚合函数和条件判断结合起来,只累加每列中的正值。这里有两种常用写法:
写法1:CASE表达式(兼容性拉满)
这种写法几乎支持所有SQL数据库,不会有兼容性问题:
SELECT SUM(CASE WHEN Column1 > 0 THEN Column1 ELSE 0 END) AS Column1_Positive_Sum, SUM(CASE WHEN Column2 > 0 THEN Column2 ELSE 0 END) AS Column2_Positive_Sum, SUM(CASE WHEN Column3 > 0 THEN Column3 ELSE 0 END) AS Column3_Positive_Sum FROM Sample_Table;
写法2:GREATEST()函数(更简洁)
如果你的数据库支持GREATEST()函数(比如MySQL、PostgreSQL、Oracle这些主流数据库都支持),可以用更简洁的写法:
SELECT SUM(GREATEST(Column1, 0)) AS Column1_Positive_Sum, SUM(GREATEST(Column2, 0)) AS Column2_Positive_Sum, SUM(GREATEST(Column3, 0)) AS Column3_Positive_Sum FROM Sample_Table;
针对你的示例表的运行结果
执行上面任意一条SQL,都会得到你想要的结果:
| Column1_Positive_Sum | Column2_Positive_Sum | Column3_Positive_Sum |
|---|---|---|
| 5 | 9 | 9 |
为什么适合大规模数据集?
这两种写法都只需要对表做一次全表扫描,不会产生额外的临时表或多次扫描的开销,在数据量很大的时候,执行效率会比用临时表高很多。
内容的提问来源于stack exchange,提问作者KristiyanB
相关产品推荐
相关产品推荐

