SQL支持的窗口函数如下。
函数 | 功能 |
---|---|
ROW_NUMBER | 计算行号。从1开始递增。 |
RANK | 计算排名。排名可能不连续。 |
DENSE_RANK | 计算排名。排名是连续的。 |
PERCENT_RANK | 计算排名。输出百分比格式。 |
CUME_DIST | 计算累计分布。 |
NTILE | 将数据顺序切分成N等份,返回数据所在等份的编号(从1到N)。 |
LAG | 取当前行往前(朝分区头部方向)第N行数据的值。 |
LEAD | 取当前行往后(朝分区尾部方向)第N行数据的值。 |
FIRST_VALUE | 取当前行所对应窗口的第一条数据的值。 |
LAST_VALUE | 取当前行所对应窗口的最后一条数据的值。 |
NTH_VALUE | 取当前行所对应窗口的第N条数据的值。 |
CLUSTER_SAMPLE | 用户随机抽样。返回True表示该行数据被抽中。 |
COUNT | 计算窗口中的记录数。 |
MIN | 计算窗口中的最小值。 |
MAX | 计算窗口中的最大值。 |
AVG | 对窗口中的数据求平均值。 |
SUM | 对窗口中的数据求和。 |
MEDIAN | 计算窗口中的中位数。 |
STDDEV | 计算总体标准差。是STDDEV_POP的别名。 |
STDDEV_SAMP | 计算样本标准差。 |
使用限制
窗口函数的使用限制如下:
- 窗口函数只能出现在
select
语句中。 - 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
windowing_definition
windowing_definition的语法声明如下。
--partition_clause:
[partition by <expression> [, ...]]
--orderby_clause:
[order by <expression> [asc|desc][nulls {first|last}] [, ...]]
[<frame_clause>]
将所有职工根据部门(deptno)分组(作为开窗列),每个组内根据薪水(sal)做降序排序,获得职工在自己组内的序号。命令示例如下:
select deptno, ename, sal, row_number() over (partition by deptno order by sal desc) as nums from emp;
MaxComputeSQL支持的窗口函数的命令格式、参数及示例_云原生大数据计算服务 MaxCompute-阿里云帮助中心