mysql sum函数_让人抓耳挠腮-窗口函数

9770e5fccb9863bbcae808bec16a676d.png

注:以下代码在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);

785b915f21b3cfde6310405619583b82.png
test1表中的数据

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

函数结果
1.sum(字段)over()按照表整体,对字段进行汇总,表中每一行都填入最终汇总值
2.sum(字段)over(partition by 分区的字段)在分区字段内,对字段进行汇总,分区内的每一行都填入对应分区汇总的数值
3.sum(字段)over(partition by 分区的字段 order by 排序的字段 desc/asc)在分区字段内,按照排序字段进行累计,排序字段如果出现相同值,则累计数值相同

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

(1)sum(字段)over()

2c01dc0b1a38dd0274b1fbbdbdb6b0da.png

05fb293ebcf359a5eb2d9b7ee62d439b.png

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

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

277cb94104138c25cb51061d738c0e96.png

6cde14a0c9294d5857db64a208fa0810.png

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

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

f42a2123e52c3f0e7a978a3383421c48.png

a6ca9e9c74c1c349696be53ddf18bfcd.png

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值