如何在返回ColumnA的SQL查询中新增SUM(ColumnA) AS ColumnB汇总列
错误原因
你编写的SQL直接使用了SUM()聚合函数但未指定GROUP BY子句,数据库会将整张表的所有行聚合为单一结果行,无法同时保留每行的ColumnA原始值和全局总和,不符合每行都展示总合计的需求。
正确实现方案
方案1:使用窗口函数(推荐,适配MySQL 8.0+、PostgreSQL、SQL Server、Oracle等主流现代数据库)
窗口函数OVER()不加分区条件时,会基于整张表的结果计算全局总和,完美匹配你的需求:
SELECT ColumnA, SUM(ColumnA) OVER () AS ColumnB FROM `Table`
方案2:子查询关联(兼容不支持窗口函数的老版本数据库)
先通过子查询计算出ColumnA的全局总和,再和原表做笛卡尔积关联,把总和拼到每一行上:
SELECT t.ColumnA, total.sum_a AS ColumnB FROM `Table` t, (SELECT SUM(ColumnA) AS sum_a FROM `Table`) total
两种方案运行后都会得到你预期的效果,每行ColumnB固定为所有ColumnA的总和37。
内容的提问来源于stack exchange,提问作者Paul KT
相关产品推荐
相关产品推荐

