SQL:聚合类窗口函数的preceding和following参数用法 |
您所在的位置:网站首页 › sql语句中取整数和小数部分的函数 › SQL:聚合类窗口函数的preceding和following参数用法 |
目录 partition by 分组字段: order by 排序字段 rows between 和range between 对比 unbound和current row 窗口函数:函数() over (partition by col1 order by col2) 聚合类窗口函数顾名思义,是指窗口函数中的函数部分为聚合函数,包括: 求和sum()、最大值max()、最小值min()、均值avg()、标准差std()等 这些函数在窗口上的使用规则都是类似的,我们以sum()求和函数为例来看一看 简单的数据示例 studentclassscore11班9021班8032班9642班8552班70 partition by 分组字段:partition by class 是指在班级内部进行sum()函数统计 partition by不设置,就是指在全部数据范围内进行sum函数统计 studentclassscoresum()over(partition by class )sum()over()11班9017041021班8017041032班9024041042班8024041052班70240410 order by 排序字段order by score 是指将分数从低到高排序(倒序的话:order by score desc) studentclassscoresum(score)over(partition by class order by score desc )11班909021班8017032班909042班8017052班70240 rows between 和range between 对比当数据不重复时,这样写没有问题,但是如果数据重复,就会出现下面的问题 studentclassscoresum(score)over(order by score desc)11班9018032班9018021班8034042班8034052班70410因为在排序时,同样是90分和80分的记录无法区分,所以只能全部加入结果。如果想要避免这样的问题就需要引入order by参数中的: rows between 1 preceding and 2 following含义:在当前行往前1行,往后2行,一共4行范围内进行计算 range between 1 preceding and 2 following含义:在当前行的数值往前1个数值,往后1个数值,进行计算,范围不一定是4行,因为可能会出现重复值 如果是简单的order by col,默认使用的事range between。所以说:如果存在重复值的时候,需要写成rows between。 unbound和current row其中数值1和2可以替换成任意值,也可以直接使用unbounded和current row ,其中unbounded表示不做限制,current row 表示当前行 rows between unbounded preceding and unbounded following含义:按照分组内全部行求和,不做任何限制 rows between unbounded preceding and current row含义:从分组内排序的起始行到当前行 range between unbounded preceding and unbounded following含义:按照分组内全部行求和,不做任何限制 range between unbounded preceding and unbounded following含义:从分组内排序的起始行的值到当前行的值 由此可知,在上述案例中,如果我们想得到1、2班全部同学成绩从高到低排序的累计求和可以这样写: sum(score)over (order by score desc rows between unbounded preceding and current row) 具体说明如下: 因为不需要对班级分组,所以partition by class不写order by score desc 表示按分数倒序排序rows between 是因为成绩中存在重复值,使用rows between可以保证和当前行的数值相同的行不会被计算进去unbounded preceding 表示从起始行开始current row 表示到当前行 实用价值窗口函数的移动(proceding 和following)不仅可以实现上述累加求和的效果,在计算移动平均值的时候也非常有用,可以使用如下写法实现: avg(求均值字段)over(order by date rows between 3 proceding and current row) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |