Oracle 窗口函数 目录Oracle 窗口函数1. 准备工作2. 认识 over() 函数2.1 分组、排序、窗口2.2 最值函数:first_value()与last_value()2.3 排序函数:rank()、dense_rank()与row_number()2.4 之前/后第N个值:lag() 与 lead()2.5 百分比:ratio_to_report()3. 小总结 Oracle 窗口函数 窗口函数是分析函数的一种,通常可以理解成over()函数 分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,与普通的聚合函数不同,聚合函数用group by分组,每个分组返回一个统计值;而分析函数采用partition by 分组,并且每组每行都可以返回一个统计值。 构成格式:函数名①() over(partition by 分组的列名 order by 排序的列名 rows/range.. 子句) 函数名①一般来说有几种: 一种是聚合函数,像是sum、avg、count这种 一种是排序函数(序列函数),像是rank、dense_rank、row_number这种 一种是不好归类的,像是row_number这种行数范围的 1. 准备工作 练习SQL: 2. 认识 over() 函数 查询每个部门的总薪资,SQL1: 结果
2.1 分组、排序、窗口 分析函数包含三个分析子句:分组(partition by)、排序(order by)、窗口(rows)。 分组和排序和 group by、order by 没什么差别,不多说。 窗口子句是在进行排序统计时对数据作出的一些限制,窗口子句中有三个属性值: UNBOUNDED PRECEDING :第一行 CURRENT ROW :当前行 UNBOUNDED FOLLOWING :最后一行 窗口子句不能单独出现,必须有order by 子句时才能出现,如: 而出现order by 子句的时候,可以忽略不写窗口子句,这时候默认为当前组的第一行到当前行!即默认为:ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 。 按部门查询累计薪资,SQL2: 结果:
【小总结】 当省略窗口子句时: 如果存在order by, 则默认的窗口是 unbounded preceding and current row. 如果同时省略order by, 则默认的窗口是 unbounded preceding and unbounded following. 如果省略分组,则把全部记录当成一个组: 如果存在order by 则默认窗口是unbounded preceding and current row 如果这时省略order by 则窗口默认为 unbounded preceding and unbounded following 2.2 最值函数:first_value()与last_value() 部门内最低和最高薪资: 执行结果:
first_value() 与 last_value() 用于第一个值和最后一个值 first_value()倒序排名也可获得 last_value() 的效果 2.3 排序函数:rank()、dense_rank()与row_number() 部门内员工薪资排序: 结果:
rank():值相同时排名相同,其后续排名跳跃不连续 dense_rank():值相同时排名相同,但后续排名连续不跳跃 row_number():值相同时排名不同 2.4 之前/后第N个值:lag() 与 lead() 查询当前行向下偏移n行对应的结果 函数 lag(arg1, arg2, arg3): arg1:要的行的表达式 arg2:偏移量,默认值为1 arg3:超出了分组的范围时返回的值,默认为null lead() 与lag() 效果相反。 结果为:
应用场景:在进行排名时,想知道前一名的积分,或者是还差多少分可排名上前一名 2.5 百分比:ratio_to_report() ratio_to_report(a) over(partition by b) :求按照b分组后a的值在所属分组中总值的占比,a的值必须为数值或数值型字段。 【注意】:禁用order by 薪资占有的百分比: 结果:
3. 小总结 平时的开发中,不用分析函数也能达到我们想要的效果,只是有了分析函数会方便很多,所以当做一种辅助方式就好。 以上是日常用到较多的函数,后续持续更新。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/88670.html