You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

窗口函数技术疑问:如何实现无分区的SUM聚合计算?

实现无分区的窗口SUM函数获取整列总和

嘿,这问题太常见了!你要的就是不指定分区的窗口SUM计算,完全不用分组操作,直接让窗口覆盖整个数据集就行。

核心写法特别简单,只需要把PARTITION BY子句去掉,让OVER()括号里保持为空:

SUM(your_column) OVER () AS total_column_sum

举个实际例子

假设你有一张orders表,结构如下:

order_idorder_amount
1100
2200
3150

执行下面的查询:

SELECT
    order_id,
    order_amount,
    SUM(order_amount) OVER () AS total_sales
FROM orders;

返回的结果会是:

order_idorder_amounttotal_sales
1100450
2200450
3150450

可以看到,total_sales列每一行都是整个order_amount列的总和,完全符合你要的“常量值填充每一行”的需求。

补充说明

  • 兼容性:这个写法在MySQL 8.0+、PostgreSQL、SQL Server、Oracle等主流数据库里都能正常工作,是通用语法。
  • 过滤后的总和:如果你的查询带有WHERE子句,SUM() OVER ()计算的是过滤后结果集的整列总和,而不是原表的全部数据,这通常也是符合预期的。
  • 替代写法:有些数据库也支持SUM(your_column) OVER (PARTITION BY NULL),但OVER()更简洁,优先推荐前者。

和GROUP BY的本质区别是:窗口函数不会改变结果集的行数,只是为每一行新增计算后的列;而GROUP BY会合并行,最终返回的是分组后的聚合结果,这正是你不需要分组操作的关键原因。

内容的提问来源于stack exchange,提问作者SUBZERO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:13:14