Oracle 窗口函数over()与窗口子语句

本文介绍了使用SQL进行数据分析的方法,包括如何运用分析函数和窗口函数处理数据,以及实现行列转换的技术。通过具体实例展示了如何求取部门薪水总和及行列转换的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drop table t purge;
create  table t(id number,deptno number,name varchar2(20),sal number);
insert into t values(1,1,'1aa',120);
insert into t values(2,1,'2aa',300);
insert into t values(3,1,'3aa','100');
insert into t values(4,1,'4aa',99,);
insert into t values(5,1,'5aa',90);
insert into t values(6,2,'6aa',87);
insert into t values(7,2,'7aa',500);
insert into t values(8,2,'8aa',200);
insert into t values(9,2,'9aa',20);
insert into t values(10,2,'10aa',30);

deptno 为部门号,sal为薪水

--获取每个部门薪水的总数

select t.*,sum(sal)over(partition by deptno order by sal desc 
       ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as last_value 
from t t;
--last_value,sum为分析函数,over为开窗函数(窗口函数:分析函数分析时要处理的数据范围),
--形式如:over(partition by xxx order by yyy rows between zzz)
--窗口子句:UNBOUNDED PRECEDING表示数据范围的第一行
--current row表示数据范围的当前行
--UNBOUNDED FOLLOWING表示数据范围的最后一行

查询出的值为:

Oracle 窗口函数over()与窗口子语句

看另一实例:

select t.*,sum(sal)over(partition by deptno order by sal asc 
       ROWS BETWEEN UNBOUNDED PRECEDING AND current row) as last_value 
from t t;

查询出的值为:

Oracle 窗口函数over()与窗口子语句

行转列:pivot(max(..) ... for(分组的字段)in(分组的值))

--行转列
select * from (select sal,deptno from t) 
pivot(max(sal) as max_sal,sum(sal)as sum_sal,avg(sal) as avg_sal for(deptno) in(1,2))

Oracle 窗口函数over()与窗口子语句

本文为头条号作者发布,不代表今日头条立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值