mysql sum over mysql sum over函数_数据


注:以下代码在MYSQL中运行完成

最近学习了窗口函数,统一书写形式为:

函数名(某字段)over(partition by 分区字段 order by 排序字段)

一共有两个括号,括号里面可以填参数,也可以不填,依据函数的不同而决定。下面将介绍7种窗口函数。

一、汇总函数

  1. 函数内容:

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);


mysql sum over mysql sum over函数_数据_02

test1表中的数据


其中比较搞不清楚的是over后面两个参数的作用,通过实验,得出以下结论

函数

结果

1.sum(字段)over()

按照表整体,对字段进行汇总,表中每一行都填入最终汇总值

2.sum(字段)over(partition by 分区的字段)

在分区字段内,对字段进行汇总,分区内的每一行都填入对应分区汇总的数值

3.sum(字段)over(partition by 分区的字段 order by 排序的字段 desc/asc)

在分区字段内,按照排序字段进行累计,排序字段如果出现相同值,则累计数值相同

下面用实际的例子来演示一下

(1)sum(字段)over()


mysql sum over mysql sum over函数_数据_03


mysql sum over mysql sum over函数_mysql sum函数_04


可以看到sum(number_) over()这一列,汇总了number_这一列,表中每一行都填入最终汇总值。

(2)sum(字段)over(partition by 分区的字段)


mysql sum over mysql sum over函数_字段_05


mysql sum over mysql sum over函数_mysql sum over_06


可以看到sum(number_) over(partition by organization)这一列,按照organization这一列将数据分区,并按照分区汇总了number_这一列,表中每一行都填入最终汇总值。

3.sum(字段)over(partition by 分区的字段 order by 排序的字段 desc/asc)


mysql sum over mysql sum over函数_mysql sum over_07


mysql sum over mysql sum over函数_mysql sum函数_08


可以看到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