8.开窗函数

1.开窗函数

1.聚合类开窗

max() min() avg() sum() count()

特点

1.开窗函数内必须要有内容

2.分析子句没有硬性要求

3.聚合类开窗中 order by 子句不光有排序的功能,还可以实现累计

累计计数 count,累计求和 sum,累计取平均 avg,;累计取最大 max,min;

2.排序类开窗

row_number() rank() dense_rank()

注意点

1-排序类开窗函数的括号内不能放任何内容

2-排序类开窗函数的over() 括号中必须要有 order by

3-row_number()over() 单纯的返回当前记录在窗口中所处的位置行号,该行号有唯一性

rank()over() 排序结果中出现相同的记录时,有并列的序号,下一个排名具有跳跃性---跳号

dense_rank()over() 排序结果中出现相同的记录时,有并列的序号,下一个排名不具有跳跃性---不跳号

3.偏移类开窗

lag()over(order by) --向下偏移

lead()over (order by ) --向上偏移

实际中的应用

同比

同比: 当年某一时期的数据与上一年同一时期的数据去比较 比如24 年7月和 23年7月 去比较

--同比增长率: (本年-上年)/上年

环比

环比: 当年某一时期的数据与本年上一时期的数据去比较 比如24 年7月和 24年6月 去比较

--环比增长率: (本期-上期)/上期

2.集合运算

1.并集

union --去重

union all --不去重

select * from emp where deptno=10
union all
select * from emp where sal>2000; 相加

2.交集

intersect

select * from emp where deptno=10 
intersect 
select * from emp where sal>2000; --取相同部分 

3.差集

minus

select * from emp where deptno=10 
minus 
select * from emp where sal>2000; --前面的减去与后面的共同部分

3.行列转换

1.行转列 --竖表转横表

pivot

例:查询各个岗位在不同部门下的人数

select * from 表名 pivot(聚合函数 for 要转换的字段 in (要转换的字段的值));
select * from (select deptno, job from emp) pivot(count(1) for job 
in('CLERK' as CLERK , 'SALESMAN', 'MANAGER', 'PRESIDENT', 'ANALYST'));

2.列转行 ---横表转竖表

unpivot

语法:select * from 表名 unpivot(新列名1 for 新列名2 in (值1,值2,值3...));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值