rang和rows的区别

在这个id的分区中对每行数据求和,但是我between的数据就是本行and本行,rows的数据是对的,被between限制了,但是range是仍旧计算整个分区的数据的

img

img

range不是指的数据记录的范围,而是字段值的范围。
而且你这个截图的语法不对吧,这种移动窗口是必须要有order by 的,否则会报错

img

加上order by 后的输出结果是这样的

img

注意结果中id为4、num1为-3的行,由于等于“current row”的值有两行,因此求和的结果为-6

另外,你既然只是取当前行,何必写个开窗函数呢?如果你是想统计多行,用 “between 1 preceding and current row”这样的写法,也要注意rows和range的区别,当用rows时,"1 preceding"表示往前一行,当用range时,“1 preceding”表示当前值减1的结果对应的所有行。我这篇文章中对此有个举例说明