在mysql中,如果您使用 sum(some_col) over()
,它将返回每行的全局和。但是当你使用 sum(some_col) over(order by some_col)
,在两种情况下会给出不同的累计和:是否 some_col
具有重复值。
create table if not exists tsum (
num1 int,
num2 int
);
truncate table tsum;
insert into tsum values (2,1), (2,2), (1,3), (1,4), (3,5);
# select * from tsum;
select *, sum(num1) over (order by num1) as c1
from tsum;
select *, sum(num2) over (order by num2) as c2
from tsum;
结果是
num1, num2, c1
1,3,2
1,4,2
2,1,6
2,2,6
3,5,9
num1, num2, c2
2,1,1
2,2,3
1,3,6
1,4,10
3,5,15
为什么使用 order by
我会给你一笔钱吗?当有重复值时,为什么累积和会不同 some_col
(例如,我期望 c1
会是 1, 2, 4, 6, 9
)?
1条答案
按热度按时间kx1ctssn1#
文档解释了基本概念:
一
ORDER BY
子句指示如何对每个分区中的行进行排序。根据ORDER BY
条款被视为对等条款。如果ORDER BY
如果忽略,则分区行是无序的,没有隐含处理顺序,并且所有分区行都是对等的。窗口和的行为相应,并在执行计算时考虑对等行:
没有一个
order by
,所有行相加。当
order by
子句是存在的,但会产生联系,这些联系是对等的,它们相加在一起。当
order by
是确定性的,没有对等点,每行得到不同的结果