You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL查询疑问:添加SUM聚合函数后仅返回首行,如何获取所有行及总和?

嘿,这个问题我之前也踩过坑!让我给你理清楚为啥会这样,还有怎么解决:

为啥加了SUM之后只返回第一行?

当你在SELECT语句里同时放普通列(比如p_idpaid_amountdate)和聚合函数sum(paid_amount),但没加GROUP BY子句的时候,数据库会把整个payments表当成一个单独的分组来计算总和。这时候聚合函数会把整个分组的结果压缩成一行,所以你只能看到第一行数据(其实是整个分组的聚合结果)。

解决方案:两种常用方法

方法1:用窗口函数(推荐,现代SQL数据库都支持)

窗口函数可以让你在保留所有行数据的同时,计算整个数据集的聚合值。语法很简单:

select 
    p_id,
    paid_amount,
    date,
    sum(paid_amount) over () as total_sum
from payments;

这里的over ()表示“基于整个结果集来计算总和”,所以每一行都会显示paid_amount列的全局总和,同时保留所有原始行的数据。

这种方法适用于MySQL 8.0+、PostgreSQL、SQL Server、Oracle等绝大多数现代数据库。

方法2:用交叉连接(兼容老版本数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以用子查询先算出总和,再通过交叉连接把总和和每一行数据关联起来:

select 
    p.p_id,
    p.paid_amount,
    p.date,
    s.total_sum
from payments p
cross join (select sum(paid_amount) as total_sum from payments) s;

这个逻辑是:先通过子查询(select sum(paid_amount) ...)算出整个表的总和,然后把这个单一结果和payments表的每一行做交叉连接,这样每一行都会带上这个总和值。

内容的提问来源于stack exchange,提问作者Captaîn Aamusane

火山引擎 最新活动