类似与聚合函数也是对结果集的运算生成一行结果,不同的事窗口函数是对分组内的数据进行运算再返回多行结果。
窗口函数语法
内置窗口函数 row_num() rank() lag() 等。
聚合函数和自定义聚集函数后接over属性也可以作为窗口函数。
function_name ([expression [, expression ... ]]) [FILTER ( WHERE filter_clause )] OVER ( window_definition )
其中 window_definition 语法如下:
[ existing_window_name ]
[ PARTITION BY expression [, ... ] ]
[ ORDER BY expression [ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [ , ... ] ]
[ frame_clause ]
OVER表示窗口函数的关键字
PARTITION BY 属性对查询返回的结果集进行分组,之后窗口函数处理分组的数据。
ORDER BY 属性设定结果集的分组数据排序。
窗口函数别名
SELECT .. FROM .. WINDOW window_name as ( window_definition ) [, ... ]
例如:
select avg(score) over(r), sum(score) over(r), * from score window r as ( partition by subject );