窗口函数分类:
序列函数:将数据按大小顺序排序
row_number() 按排序顺序依次连续标号1,2,3…
相同值按排序前后,标不同的连续数字
dense_rank() 按排序顺序依次连续标号1,2,3,3,4…
相同值有相同的编号,后面的数字与前面连续
dense_rank() 按排序顺序依次不连续标号1,2,3,3,5…
相同值有相同的编号,后面的数字与前面可能不连续,按数量来算
分布函数:计算出数据所占总体的大概位置 按百分比计算
PERCENT_RANK() = (RANK() – 1) / (Total Rows – 1)
CUME_DIST()=ROW_NUMBER()/TOTAL ROWS
前后函数:向前/向后偏移取值
LAG(EXP_STR,OFFSET,DEFVAL)OVER()
LEAD(EXP_STR,OFFSET,DEFVAL)OVER()
EXP_STR:要取的列
OFFSET: 取偏移后的第几行数据
DEFVAL:没有符合条件的默认值
头尾函数:取第一个/最后一个值
first_value()over()
last_value()over()
与partition by 和order by一起使用
其他:
nth_value()和前面的头尾函数使用方法相似,取排名第n的值
nth_value(c1,n) from first over(…) 正数第n个
nth_value(c1,n) from last over(…) 倒数第n个
ntile:ntile(n) 分成n组返回组号
ROW_NUMBER()/N 向上取整