开窗函数

一 、什么是开窗函数,开窗函数有什么作用,特征是什么?

     所谓开窗函数就是定义一个行为列,简单讲,就是在你查询的结果上,直接多出一列值(可以是聚合值或是排序号),特征就是带有over()。

二、开窗函数分类

     根据使用的目的,开窗函数可以分为两类:聚合开窗函数和排序开窗函数。

    下面主要解析四种常用的排序开窗函数: 

     1、ROW_NUMBER() OVER () ;   

     2、RANK() OVER ();

     3、DENSE_RANK() OVER () ;

     4、NTILE(n) OVER () .

三、实例解析

     拿楼主前段时间配的DIY电脑,做个例子,显卡和固态硬盘没买,价格为空,四种排序的区别,一看便知。

开窗函数_第1张图片


开窗函数适用于在每一行的最后一列添加聚合函数的结果。

常用开窗函数:
1.为每条数据显示聚合信息.(聚合函数() over())
2.为每条数据提供分组的聚合函数结果(聚合函数() over(partition by 字段) as 别名) --按照字段分组,分组后进行计算
3.与排名函数一起使用(row number() over(order by 字段) as 别名)

常用分析函数:(最常用的应该是1.2.3 的排序)
1、row_number() over(partition by ... order by ...)
2、rank() over(partition by ... order by ...)
3、dense_rank() over(partition by ... order by ...)
4、count() over(partition by ... order by ...)
5、max() over(partition by ... order by ...)
6、min() over(partition by ... order by ...)
7、sum() over(partition by ... order by ...)
8、avg() over(partition by ... order by ...)
9、first_value() over(partition by ... order by ...)
10、last_value() over(partition by ... order by ...)
11、lag() over(partition by ... order by ...)
12、lead() over(partition by ... order by ...)
lag 和lead 可以 获取结果集中,按一定排序所排列的当前行的上下相邻若干offset 的某个行的某个列(不用结果集的自关联);
lag ,lead 分别是向前,向后;
lag 和lead 有三个参数,第一个参数是列名,第二个参数是偏移的offset,第三个参数是 超出记录窗口时的默认值)


你可能感兴趣的:(数据库)