繁体   English   中英

sum() Over(按 a,b 顺序分区)

[英]sum() Over(partition by order by a,b)

我有一张桌子:

fname|o_details| cost
eva  |coat|125
eva  |coat|225
eva  |shirt|60
eva  |slipper|20
farida|coat|100
farida|shirt|50
farida|shoes|80
farida|skirt|30
henry|shoes|80

我试图了解以下之间的区别:

sum(cost) over(partition by fname order by fname desc) as part_by_fname,
sum(cost) over(partition by fname order by fname,o_details desc) as part_by_both

我的理解是 order by in over 子句只是更改顺序,我们根据分区应用 window 聚合 function 。 但令我惊讶的是,我收到了随附的 output。 . 在此处输入图像描述

请解释这两个 over 子句背后的逻辑以及它们的不同之处

9.22 开始。 Window 功能

当聚合 function 用作 window function 时,它聚合当前行的 Z2FB45B8C735CBD2702 帧内的行。 ORDER BY和默认 window 帧定义一起使用的聚合会产生“运行总和”类型的行为,这可能是也可能不是想要的。 要获得整个分区的聚合,请省略ORDER BY或使用ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 可以使用其他框架规格来获得其他效果。

当您按ORDER BY fname排序时,分区内的所有行都按该顺序具有“相同”的 position。 您还PARTITION BY fname ,所以ORDER BY fname无效。 因此,window 帧对于分区中的所有行都是相同的,因此函数的结果也相同。

然后,当您ORDER BY o_details时,它会产生效果。 分区中行的 position 不再对所有行都相同。 由于帧是相对于该行的 position 的顺序,因此几乎每一行都不同,函数的结果也不同。 我写的差不多,因为这并不完全适用于'eva'的两个fname'coat'o_details相同。 他们共享一个 position。 因此,对于这两行,由于上述原因,函数的结果再次相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM