窗口函数:
实现实时分析处理,而添加的标准SQL功能。
窗口函数是类似于可以返回聚合值的函数,例如sum()、count()、max()等。 但又与普通的聚合函数不同,因为它不会对结果进行分组,这使得输出与输入的行数相同。
窗口函数样式:
select 窗口函数() over([partition by xx order by xx]) from 表名;
说明:
(1)聚合功能:窗口函数可以使用聚合函数sum()、count()、avg()之类的计算统计功能;
(2)partition by:只需要把他看成是group by子句,但在窗口函数中,要写成partition by;
(3)order by:order by和普通查询语句中的order by没什么不同,但要注意输出顺序。
窗口函数的基本语法:
窗口函数名(字段名) over([partition by 分区字段名] [order by 分组内排序])
说明:
(1)窗口函数名可以是聚合函数,例如sum()、count()、avg()等,也可以是分析函数;
(2)聚合函数有count()、sum()、avg()、min()、max();
(3)分析函数有row_number、rank、dense_rank等。
窗口函数over()子句
1.当要给窗口函数取别名时,可以采用【as 别名】方式。
2.使用over()可以与聚合函数一起悬浮显示。
3.将over()结果再计算,是窗口函数的经典应用。
4.窗口函数可以与Where条件语句一起配合使用但要注意窗口函数是在where条件语句后再执行。
窗口函数分组和排序的应用
语法:
ranking函数名() over([partition by 字段名1] order by 字段名 [asc | desc]) [as 别名]
说明:
(1)ranking函数名()可以是row_number()、rank()、dense_rank()这三个函数中的某一个,都用于返回结果集的分组内每行排名;
(2)row_number()不管排名是否有相同的,都会加序号,且按照1、2、3、...、n顺序;
(3)rank()是当排名相同时,名次一样,且同一排名有几个,后面排名就会跳过几次;
(4)dense_rank()是当排名相同的名次一样,且后面名次不跳过;
(5)order by就是将数据按照传入的字段从小到大或从大到小进行排序。