MySQL8.0新特性-窗口函数
简介
窗口函数与分组聚合函数类似,但是每行数据都生成一个结果。
聚合窗口函数: SUM、AVG、COUNT、MAX、MIN
……
1 | -- 创建表 |
普通函数
1 | --正常情况下的计算不同国家的总利润: |
专用窗口函数
1 | -- 准备数据 |
序号函数
显示当前行号
- ROW_NUMBER():排序
- RANK()
- DENSE_RANK()
1 | -- 正常排序 |
头尾\前后函数
- FIRST_VALUE()
- LAST_VALUE()
- LEAD()
- LAG()
1 | select val,first_value(val) over (order by val) as 'first' |
分布函数
CUME_DIST()
- 用途:分组内小于等于当前rank值的行数/分组内总行数,这个函数比percen_rank使用场景更多。
- 应用场景:大于等于当前val的记录比例有多少。
PERCENT_RANK()
- 用法:和之前的RANK()函数相关,每行按照如下公式进行计算:
(rank - 1) / (rows - 1)
其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数。
- 用法:和之前的RANK()函数相关,每行按照如下公式进行计算:
1 | select val,rank() over (order by val) as 'rank' |
数据区间函数
- NTH_VALUE(expr,n)
- 用途:返回窗口中第N个expr的值,expr可以是表达式,也可以是列名。
- 应用场景:每个用户订单中显示本用户金额排名第二和第三的订单金额。
- NTILE()
- 用途:将分区中的有序数据分为n个桶,记录桶号。
- 应用场景:将每个用户的订单按照订单金额分成3组。
1 | select year,profit,nth_value(profit,1) over w as 'nth_1' |
本文地址:MySQL8.0新特性-窗口函数
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
官方介绍