窗口函数

应用场景
窗口函数通常用于解决
  1. 组内排名问题,即在每个小组中进行排序,取出每组的前N个观测
  2. 组内累计聚合问题即在每个小组中进行排序,然后进行累计聚合
基本语法
<窗口函数> over (partition by 用于分组的变量 order by 用于排序的变量 [desc/asc])
常用的窗口函数
  1. 专用窗口函数:
    函数名
    结果
    rank()
    都会根据分组变量进行分组后,在每
    个组内根据排序变量进行排序,区别
    在于当排序变量值相同,即出现并列
    时的结果
    并列会顺延排名,即1,1,3,4,5
    dense_rank() 并列不会顺延排名,即1,1,2,3,4
    row_number() 不考虑并列,相同的观测会随机排序,即1,2,3,4,5
  2. 聚合函数:avg,sum,min,max等聚合函数,得到每个分组的累计聚合值;结果是根据分组变量进行分组,在每个组内根据排序变量进行排序后,由前到后根据聚合函数进行累计聚合,得到相应的累计求和,累计平均等
完整示例
select *,rank() over (partition by class order by score),avg(score) over (partition by class order by score) from class_table
注意事项
  1. 原则上,窗口函数只能写在select子句中
  2. 专用窗口函数的括号内不需要填变量或参数
  3. 与group by的差别在于partition by不会减少行数,而group by会将表的行数减少到类别的数量,因此group by得到的是分组的总聚合值,窗口函数得到的是分组的累计聚合值




全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务