0
点赞
收藏
分享

微信扫一扫

神了,程序员放弃写代码,直接用SQL写逻辑,你废吗?

DYBOY 2022-01-16 阅读 71
👨‍🎓 博主介绍:
IT邦德,江湖人称jeames007,10年DBA工作经验
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证

擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,
安装迁移,性能优化、故障应急处理等。

文章目录

前言

分析函数用于计算基于组的某种聚合值,能够实现复杂的逻辑,本文做了详细的阐述~

🍁 一、分析函数语法

function_name(<argument>,<argument>...) over(<partition_Clause><order by_Clause><windowing_Clause>);

🍃 1.1 参数详解

🍃 1.2 常用分析函数

🍁 二、汇总

🍃 2.1 总计数

在这里插入图片描述

🍃 2.2 递加累计求和

在这里插入图片描述

🍃 2.3 分组求平均值

在这里插入图片描述

🍃 2.4 分组递加求最大

在这里插入图片描述

🍁 三、排序

🍃 3.1 无重复值排序

在这里插入图片描述

在这里插入图片描述

🍃 3.2 排序连续

在这里插入图片描述

🍃 3.3 排序跳跃

在这里插入图片描述

🍁 四、KEEP函数

select job, max(sal) keep(dense_rank first order by sal desc), max(sal) keep(dense_rank last order by sal desc) from emp group by job;

在这里插入图片描述
在这里插入图片描述

🍁 五、开窗函数

指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化
50 preceding:前50150 following:后150UNBOUNDED :不受控的,无限的
current row 当前行

// 从当前行到最后的数据
between current row and unbounded following
//前面所有行与当前行的累加
rows between unbounded preceding and current row
//前一行的值+当前行的值+后一行的值
rows between 1 preceding and 1 following
//开始到结束的所有数据
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

🍃 5.1 ROW窗口

select deptno,ename,sal,deptno,
sum(sal) over(
         partition by deptno
         order by ename
         rows 2 preceding
)sliding_total
from emp

在这里插入图片描述

🍃 5.2 Range窗口

rows表示行,就是前n行,后n行
而range表示的是具体的值,比这个值小n的行,比这个值大n的行
range between是以当前值为锚点进行计算

select ename,hiredate,sal,deptno,
sum(sal) over(partition by deptno order by sal asc range 100 preceding) sum_sal
from emp;

在这里插入图片描述

举报

相关推荐

0 条评论