简介
窗口函数也叫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()
网友评论