赞
踩
注:以下代码在MYSQL中运行完成
最近学习了窗口函数,统一书写形式为:
函数名(某字段)over(partition by 分区字段 order by 排序字段)
一共有两个括号,括号里面可以填参数,也可以不填,依据函数的不同而决定。下面将介绍7种窗口函数。
一、汇总函数
5种 | 函数特点 |
---|---|
1.sum(字段) over (partition by 分区的字段 order by 排序的字段 desc/asc) | 第一行到当前行字段累计汇总值 如果相同的值则对应的累计汇总值相同 |
2.avg(字段) over (partition by 分区的字段 order by 排序的字段 desc/asc) | 第一行到当前行字段累计平均值 如果相同的值则对应的累计平均值相同 |
3.count(字段) over (partition by 分区的字段 order by 排序的字段 desc/asc) | 第一行到当前行的累计计数 如果相同的值则对应的累计计数相同 |
4.Max() over (partition by 分区的字段 order by 排序的字段 desc/asc) | 第一行到当前行的最大值 往往配合滑动函数使用 |
5.min() over (partition by 分区的字段 order by 排序的字段 desc/asc) | 第一行到当前行的最小值 往往配合滑动函数使用 |
2.运算逻辑:
第一行到当前行
3.运算举例
下面以sum()over()函数举例子
新建一个表test1
create table test1(organization varchar(20), ranking int, number_ int);
insert into test1 values(1,1,1),(1,1,2),(2,1,2),(3,1,3),(1,2,5), (1,3,4),(2,3,6),(2,3,6),(3,3,5),(1,2,3), (2,2,5),(3,4,4),(2,2,5),(3,2,3);
其中比较搞不清楚的是over后面两个参数的作用,通过实验,得出以下结论
函数 | 结果 |
---|---|
1.sum(字段)over() | 按照表整体,对字段进行汇总,表中每一行都填入最终汇总值 |
2.sum(字段)over(partition by 分区的字段) | 在分区字段内,对字段进行汇总,分区内的每一行都填入对应分区汇总的数值 |
3.sum(字段)over(partition by 分区的字段 order by 排序的字段 desc/asc) | 在分区字段内,按照排序字段进行累计,排序字段如果出现相同值,则累计数值相同 |
下面用实际的例子来演示一下
(1)sum(字段)over()
可以看到sum(number_) over()这一列,汇总了number_这一列,表中每一行都填入最终汇总值。
(2)sum(字段)over(partition by 分区的字段)
可以看到sum(number_) over(partition by organization)这一列,按照organization这一列将数据分区,并按照分区汇总了number_这一列,表中每一行都填入最终汇总值。
3.sum(字段)over(partition by 分区的字段 order by 排序的字段 desc/asc)
可以看到sum(number_) over(partition by organization order by ranking)这一列,按照organization这一列将数据分区,并按照ranking这一列排序,再去累计number_这一列,结果是每一行的值是第一行到当前行的累加值,如果按照排序的ranking字段有相同值,则累计数值相同。比如上图第1行与第2行,ranking的值都是1,最终值3,是二者累加值,并且最后一列第1行与第2行值相同。同理第3行与第4行;第7行与第8行;第9行与第10行。
二、排序函数
三、分布函数
四、前后函数
五、头尾函数
六、ntile
七、nthnth_value
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。