窗口函数要点总结(个人记录使用)

本文总结了SQL窗口函数的概念,功能和使用场景,详细解释了窗口函数在数据分组和排序上的作用,并介绍了rank、dense_rank和row_number等专用窗口函数以及聚合函数如sum、avg等在窗口函数中的应用,帮助理解如何在每个分组内进行排名和实时分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.定义:

  • 窗口函数(OLAP函数:Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。

2.功能:

  •  同时具有分组(partition by)和排序(order by)的功能
  •  不减少原表的行数,所以经常用来在每组内排名

3.使用位置与场景:

  • 原则上只能写在select子句中。
  • 可应用于在每组内排名的场景。

4.语法:

  • []中的内容可以省略
  •      <窗口函数> over ([partition by <列清单>]
  •      order by <排序用列清单>)
  • partition by:设定排序的对象范围,类似group by语句。
  •  order by:指定列进行排序,也可以通过ascdesc来指定升序降序

5、窗口函数类型

  • 专用窗口函数,包括rank, dense_rank, row_number等
  1.     ①rank函数:计算排序时,如果存在相同位次的记录,则会跳过之后的位次。

    ②dense_rank函数:同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。

    ③row_number函数:赋予唯一的连续位次。

  • 聚合函数,sum. avg, count, max, min等

    聚合函数作为窗口函数,可以在每一行的数据里直观的看到,截止到本行数据,统计数据是多        少(最大值、最小值等)。同时可以看出每一行数据,对整体统计数据的影响。

    注意:当为聚合函数时,order by还起到窗口内从当前行到之前所有行的聚合,不加order by          的话,就是针对一整个分区进行聚合。加上order by后,就是根据当前行到之前所有行聚合。

6、举例具体说明:

  • 专用窗口函数
学号班级成绩
0001186

0002

195
0003289
0004183
0005286
0006392
0007386
0008188
#按班级分组,对成绩排序
select *,
   rank() over (partition by 班级
                 order by 成绩 desc) as ranking
from 班级表;
学号班级成绩ranking
00021951
00081882
00011863
00041834
00032891
00052862
00063921
00073862
  • 聚合窗口函数
select *,
   sum(成绩) over (partition by 班级order by 学号) as current_sum1,
   #按照班级分组,学号排序,对成绩到当前行求和
   sum(成绩) over (partition by 班级) as current_sum2
   #按照班级分组,对成绩求和
from 班级表;
学号班级成绩current_sum1current_sum2
00118686181
002195181181
00328989172
004283172172
00538686178
006392178178

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值