SQL中的窗口函数

2021-07-27  本文已影响0人  我就是鱼鱼鱼

简介

窗口函数也叫OLAP函数,一般用于聚合函数无法实现的高级操作

语法

窗口函数语法

常见的窗口函数

1、聚合函数(sum、count、max等)

2、专用函数:rank、dense_rank、row_number 

实例

1、分区统计个数(统计部门号为20的员工总数):使用count(*)over() 统计分区中所有计数,

使用count(*) over()统计分区中所有数据

如果没有over() 函数,统计的结果是对每一个first_name单独计数,使用over()函数则是将所有满足department_id = 20的数据进行统计。

2、partition by 定义行的分区或组,使用该函数对分组的行组进行聚类

*** 该函数中还需要和over() 进行联合使用

partition by分组统计

以上例子中使用department_id 进行partition分组,所以统计结果会将每一个department_id进行以此分组,然后统计每个该ID下面的数量。

***优点:在同一个select函数中一个partition by 函数独立于其他分区函数计算

在同个selcet中,每个partition by 都是相互独立的

实例:

针对以下的例子计算出每个员工与平均分数的差值

计算实际分数与平均分数的差值

3、窗口函数中的排序函数,其中rank()为非连续排名函数(1,1,2,2,5),dense_rank为连续排名(1,1,2,2,3)

实例:

查找出科目三各同学排名情况

使用rank()查看排名 使用连续函数dese_rank() 查看排名

4、错行函数(lag,lead),lag上几行,lead下几行

(lag,lead)语法 使用(lag,lead)效果展示

5、order by 如果是在窗口函数中使用,那么排序是在窗口中进行排序,实际的运用中会起到累计的作用

如以下的例子:

在partition中使用与不使用order by 区别

使用order by之后会将partition 分组后的的数据按照order by 后面的数据进行累计汇总方式

窗口函数用于计算累加值 

描述:现存在表salaries,其中包含员工ID字段emp_no,薪资字段salary,现按照salary的累计和running_total,其中running_total为前N个当前( to_date = '9999-01-01')员工的salary累计和,其他以此类推

相关代码如下:

使用窗口函数计算累计

运行结果如下:

使用窗口函数计算累计

窗口函数:row_number()

对窗口函数中的数据进行排序,一般会结合order by 函数使用

描述:现存表employees,需要输出first_name排名(按first_name升序排序)为奇数的first_name

代码如下:

窗口函数row_number()
上一篇 下一篇

猜你喜欢

热点阅读