美文网首页
SQL中的窗口函数

SQL中的窗口函数

作者: 我就是鱼鱼鱼 | 来源:发表于2021-07-27 18:48 被阅读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()

    相关文章

      网友评论

          本文标题:SQL中的窗口函数

          本文链接:https://www.haomeiwen.com/subject/oqlcmltx.html