暂无图片
postgresql window用法
我来答
分享
柚子身上依
2024-02-19
postgresql window用法

image.png

请问这个window 函数 range between 1 preceding and 6 following 的计算逻辑是什么,sum(score) over w1 的结果是怎么计算出来的?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
lianR

这个 window 函数 range between 1 preceding and 6 following 的计算逻辑是对每一行的数据,计算它前面一行到后面六行的数据的总和。具体来说,对于每一行,都会将其自身的值,前面一行的值,以及后面六行的值相加,得到一个新的值。这个新的值就是sum(score)  over  w1的结果。

例如,假设我们有一个名为 score 的列,其值为1,  2,  3,  4,  5,  6,  7,  8,  9。那么,sum(score)  over  w1 的结果将会是:

-  对于第一行,只有1和2(因为没有前一行,所以只计算自身和后一行),所以结果是3。
-  对于第二行,有1,  2,  3,  4,  5,  6,  7,  8(前一行,自身,和后六行),所以结果是36。
-  对于第三行,有2,  3,  4,  5,  6,  7,  8,  9(前一行,自身,和后六行),所以结果是44。
-  以此类推。

需要注意的是,如果在数据的开始或结束部分,没有足够的行来计算完整的窗口,那么将只计算可用的行。例如,在上述例子中,对于最后一行,只有4,  5,  6,  7,  8,  9(前一行和自身,因为没有后续的行),所以结果是39。

暂无图片 评论
暂无图片 有用 2
暂无图片
柚子身上依

image.png
我测试了一下和你说的稍微有点不一样,第一行的结果不是3,最后一行的结果也不是39,我理解你的意思了

暂无图片 评论
暂无图片 有用 0
lianR
2024-02-20
那这是解决了还是没解决呢
柚子身上依

这个是根据range between 1 preceding and 6 following 的范围是根据数字大小进行比较的,不是根据行号比较的,所以小于32的值没有,大于32的值33-38 没有,所以第一行的sum值是32,其他的行计算可以也是如此,但是这个90.5 在计算的时候应该是安装90来算的

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏