〇、概述
1、常用网站
SQL窗口函数:https://blog.csdn.net/liangmengbk/article/details/124253806
2、介绍
像聚合函数一样对一组数据进行分析并返回结果
3、与聚合函数的不同
聚合函数将一组数据汇总成单个结果,窗口函数为每一行数据都返回一个结果
一、窗口函数组成
(一)语法
窗口函数() over(partition by xxx order by yyy frame_clause)
frame_clause:框架子句,即窗口范围
(二)标识窗口-over
OVER子句用于指定一个数据分析的窗口,表明是一个窗口函数
括号内为空,表示将所有数据作为一个分组进行汇总
(三)分区-PARTITION BY
PARTITION BY用于定义分区,类似于查询语句中的GROUP BY子句
(四)排序-ORDER BY
ORDER BY用于指定分区内数据的排序方式,类似于查询语句中的ORDER BY子句
(五)指定窗口大小
frame_clause选项用于指定一个移动的分析窗口
窗口函数不再基于分区进行分析,而是基于窗口内的数据进行分析。
ROWS表示以数据行为单位计算窗口的偏移量,RANGE表示以数值(例如10天、5km等)为单位计算窗口的偏移量。
frame_start和frame_end分别定义窗口的起始位置和结束位置
窗口大小选项的定义:
如:
ROWS
RANGE INTERVAL '5' DAY PRECEDING
BETWEEN UNBOUNDED PRECEDING
AND
CURRENT ROW
二、窗口函数分类
(一)聚合窗口函数
常见的聚合函数可以做窗口函数,如AVG()、SUM()、COUNT()、MAX()以及MIN()等
(二)排序窗口函数
对数据进行分组排名,包括ROW_NUMBER()、RANK()、DENSE_RANK()、PERCENT_RANK()、CUME_DIST()以及NTILE()等函数。
使用窗口函数按照dt升序进行排序
row_number 排序结果是 1、2、3、4……
rank 排序结果是 1、2、2、4……
dense_rank 排序结果是 1、2、2、3……
(三)取值窗口函数
用于返回指定位置上的数据行,包括FIRST_VALUE()、LAST_VALUE()、LAG()、LEAD()、NTH_VALUE()等函数。
如:NTH_VALUE(use_time,2) OVER(PARTITION BY exam_id ORDER BY use_time ASC) AS min_use_time