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

关于SELECT SUM(SUM(column)) OVER() FROM table查询的结果及原理疑问

理解SELECT SUM(SUM(column)) OVER() FROM table的执行逻辑

别着急,咱们一步步拆解这个SQL的运行过程,你就能瞬间明白它为什么返回整个表的总和,而且只有一行了:

第一步:内层聚合SUM(column)的作用

首先看最里面的SUM(column)——当你在SELECT里用聚合函数但没有加GROUP BY子句时,数据库会把整个表当成一个单独的分组来计算。也就是说,SELECT SUM(column) FROM table本身就会返回一行结果,值就是column列所有数据的总和。

举个例子:如果你的table里column的值是1, 2, 3, 4,那SUM(column)会直接算出10,返回一行10。

第二步:外层窗口函数SUM(...) OVER()的作用

接下来看外层的SUM(...) OVER()——这里的OVER()是窗口函数的语法,它表示“基于整个结果集作为窗口来计算”。但此时它处理的不是原表的数据,而是内层聚合后得到的单行结果(也就是刚才的10)。

对一个单行的数值做SUM求和,结果自然还是这个数值本身。这一步相当于把已经得到的总和,再用窗口函数重新计算了一遍总和,结果不会变。

为什么最终只返回一行?

因为内层的SUM(column)已经把原表的多行数据聚合压缩成了一行,外层的窗口函数是在这个单行结果集上操作的,所以最终输出还是一行,值就是整个表column列的总和。

额外对比:和SELECT SUM(column) OVER() FROM table的区别

如果直接写SELECT SUM(column) OVER() FROM table,窗口函数会基于原表的每一行来计算,所以会返回和原表行数一样多的行,每行都是总和。而你的查询因为先做了一次聚合,把结果变成单行,所以最终只返回一行总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:37