当前位置:   article > 正文

SQL_窗口函数_sql 窗口函数,第一个值

sql 窗口函数,第一个值

1.窗口函数与分析函数

看到一篇写的很好的总结了,就把链接附上把,我们主要是结合一些题目看一下具体的用法(https://blog.csdn.net/scgaliguodong123_/article/details/60135385)

1.1 窗口函数
  • FIRST_VALUE:取分组内排序后,截止到当前行,第一个值
  • LAST_VALUE: 取分组内排序后,截止到当前行,最后一个值
  • LEAD(col,n,DEFAULT) :用于统计窗口内往下第n行值。第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)
  • LAG(col,n,DEFAULT) :与lead相反,用于统计窗口内往上第n行值。第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)
  • OVER从句
1.2 分析函数
  • ROW_NUMBER() 从1开始,按照顺序,生成分组内记录的序列,比如,按照pv降序排列,生成分组内每天的pv名次,ROW_NUMBER()的应用场景非常多,再比如,获取分组内排序第一的记录;获取一个session中的第一条refer等。
  • RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位
  • DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位
  • CUME_DIST 小于等于当前值的行数/分组内总行数。比如,统计小于等于当前薪水的人数,所占总人数的比例
  • PERCENT_RANK 分组内当前行的RANK值-1/分组内总行数-1
  • NTILE(n) 用于将分组数据按照顺序切分成n片,返回当前切片值,如果切片不均匀,默认增加第一个切片的分布。NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)。
1.3 分类

分为两类,

  • 专用窗口函数,包括后面要讲到的rank, dense_rank, row_number等专用窗口函数。
  • 聚合函数,如sum. avg, count, max, min等

2. 用例

2.0 数据

数据很简单,是自己随便做的一个成绩单。用这个数据集将做些逐渐深入的用例(后续可能会追加)
在这里插入图片描述

2.1 对不同ID按成绩降序排列,并标记是第几门科目

用途:研究复购率、多次进线数等

select ID,
       sub,
	   score,
	   row_number() over(partition by ID order by score desc) 
from sc ;
  • 1
  • 2
  • 3
  • 4
  • 5
2.2 找出每名同学排名前二的科目和成绩。
select 
    a.ID,
	a.sub,
	a.score,
	a.rk
from (
    select *,
		   rank() over(partition by ID order by score desc)  as rk
	from sc 
) a
where rk <= 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

2.3 选出每科排名前二的学生ID及对应成绩
select 
    a.sub,
    a.ID,
	a.score,
	a.rk
from (
    select *,
		   rank() over(partition by sub order by score desc)  as rk
		from sc 
) a
where rk <= 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/894252
推荐阅读
相关标签
  

闽ICP备14008679号