这几天终于在成都安顿下来了,总算有时间开始整理一下了…
主要通过BEGTUT网站进行学(zhao)习(chao)的
窗口函数的通用形式
1 | window_function_name(expression) |
首先是窗口函数名称以及表达式(应用列),over里面分别是分区定义,顺序定义和帧定义
partition_clause
1
partition by <expression>[{,<expression>...}]
负责将结果集分成块,函数在分区内执行,每次跨越分区时都会初始化
order_by_clause
1
order by <expression> [asc|desc], [{,<expression>...}]
指定在块中的排序方式
frame_clause
1
frame_unit {<frame_start>|<frame_between>}
帧单位指定当前行和帧行之间的关系类型。它可以是rows或range。当前行和帧行的偏移量是行号,如果帧单位是rows行值,则行值是帧单位range。
frame_start和frame_between定义帧边界
frame_start的值可以是:
unbounded preceding:frame从分区的第一行开始。
n preceding:第一个当前行之前的物理N行,N可以是文字数字或计算结果的表达式。
current row:当前计算的行
frame_between用法:1
between frame_boundary_1 and frame_boundary_2
frame_boundary_1和frame_boundary_2可以是:
frame_start:如前所述。
unbounded following:框架结束于分区的最后一行。
n following:当前行之后的物理N行。
Summary
| 名称 | 描述 |
|---|---|
| CUME_DIST | 计算一组值中值的累积分布。 |
| PERCENT_RANK | 计算分区或结果集中行的百分位数 |
| DENSE_RANK | 根据ORDER BY子句为其分区中的每一行分配一个排名。 它为具有相同值的行分配相同的排名。 如果两行或更多行具有相同的等级,则排序值序列中将没有间隙。 |
| RANK | 与DENSE_RANK()函数类似,只是当两行或更多行具有相同的排名时,排序值序列中存在间隙。 |
| ROW_NUMBER | 为其分区中的每一行分配一个连续整数 |
| FIRST_VALUE | 返回指定表达式相对于窗口框架中第一行的值。 |
| LAG | 返回分区中当前行之前的第N行的值。 如果不存在前一行,则返回NULL。 |
| LEAD | 返回分区中当前行之后的第N行的值。 如果不存在后续行,则返回NULL。 |
| LAST_VALUE | 返回指定表达式相对于窗口框架中最后一行的值。 |
| NTH_VALUE | 返回窗口框架第N行的参数值 |
| NTILE | 将每个窗口分区的行分配到指定数量的已排名组中。 |