/*
1.生成累计和(使用4种方法)
- 分析函数
- rows开窗
- range开窗
- 标量方式
*/select empno,
sal,
sum(sal) over(ORDERBY empno),
sum(sal) over(ORDERBY empno rows BETWEEN unbounded preceding andcurrentrow),
sum(sal) over(ORDERBY empno rang BETWEEN unbounded preceding andcurrentrow),
(selectsum(sal) from emp b where b.deptno = 30and b.empno < a.empno)
from emp a
where deptno = 30orderby1;/**
2.计算累计差
**/select seq,projectName,money,
sum(casewhen seq=1then money else -money end) over(over by seq)
from x;/**
3.更改累加和的值
**/select id,
casewhen trx = 'py'then'取款'else'存款'end type,
amt,
sum(casewhen trx = 'py'then -amt else amt end) over(orderby id)
from v orderby1;/**
4.返回各部门工资排名前三位的员工
使用 dense_rank()
**/select deptno,empno,sal,
row_number() over(partition by deptno orderby sal desc) as row_number,
rank() over(PARTITION by deptno orderby sal desc) as rank,
dense_rank() over() as dense_rank
from emp
where deptno = (20,30)
orderby1,3desc;/**
5.计算出现次数最多的值
**/select deptno,sal
from (
select deptno,sal,
dense_rank() over(PARTITION by deptno orderby 出现次数 desc) as 次数排序
from (select sal,deptno,count(*) as 出现次数 from emp groupby deptno,sal) x
) y
where 次数排序 = 1;/**
6.求总和的百分比
**/-- 方式一:通过分析函数select deptno,sum,allsum,
round((sum/allsum)*100,2) as 工资比例
from (select deptno,sum,sum(sum) over() as allsum from
(select deptno,sum(sal) sumfrom emp groupby deptno) x) y
orderby1;-- 方式二:通过专用比例函数select deptno,round((ratio_to_report(sum) over() * 100),2) as 工资比例
from (select deptno,sum(sal) sumfrom emp groupby deptno)
orderby1;
/*1.生成累计和使用四中方法- 分析函数- rows开窗- range开窗- 标量方式*/select empno, sal, sum(sal) over(ORDER BY empno), sum(sal) over(ORDER BY empno rows BETWEEN unbounded preceding and