这几天终于在成都安顿下来了,总算有时间开始整理一下了…
主要通过BEGTUT网站进行学(zhao)习(chao)的

窗口函数的通用形式

1
2
3
4
5
6
window_function_name(expression)
over (
[partition_definition]
[order_definition]
[frame_definition]
)

首先是窗口函数名称以及表达式(应用列),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_startframe_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 将每个窗口分区的行分配到指定数量的已排名组中。