Oracle select --分析函数over()

来源:互联网 发布:域名注册 知乎 编辑:程序博客网 时间:2024/05/17 22:55


 --分析函数over()
--开窗函数
--开窗函数的的理解:
/*
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
over(partition by deptno)按照部门分区
over(order by salary range between 50 preceding and 150 following)
每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150
over(order by salary rows between 50 preceding and 150 following)
每行对应的数据窗口是之前50行,之后150行
over(order by salary rows between unbounded preceding and unbounded following)
每行对应的数据窗口是从第一行到最后一行,等效:
over(order by salary range between unbounded preceding and unbounded following)
*/

--创建表test
create table test(sales_id varchar2(2),sales varchar2(10),dest varchar2(10),dept varchar2(10),revenue number);

--创建数据
insert into test values('11','smith','hangzhou','市场',1000);
insert into test values('12','smith','wenzhou','市场',2000);
insert into test values('13','allen','wenzhou','渠道',3000);
insert into test values('14','allen','wenzhou','渠道',4000);
insert into test values('15','jekch','shanghai','渠道',2500);
--计算数据窗口表达式的销售总额
select sales_id,sales,dest,dept,revenue,sum(revenue) over(order by sales_id) as 总销售额       
from test

select sales_id,sales,dest,dept,revenue,sum(revenue) over(order by sales) as 总销售额       
from test

--计算数据窗口表达式累计销售额
select sales_id,sales,dest,dept,revenue,sum(revenue) over(partition by sales) as 累计销售额       
from test

select sales_id,sales,dest,dept,revenue,sum(revenue) over(partition by sales) as 累计销售额      
from test
order by sales_id
--计算数据窗口表达式的统计值,cnt1统计所有行数,cnt2统计表达式坐在的最大行数,cnt3统计表达式出现的次数
select sales_id,sales,dest,count(*) over() as cnt1,
       count(*) over(order by dest) as cnt2,
       count(*) over(partition by dest) as cnt3
from test

--删除表
drop table test

---平台函数
isNull(obj):判断给定对象是否为null,返回true/false;如isNull(repField("org_code"))
switch(condition,case,value,case,value……)
condition:switch语句的条件
case:case值
value:上一个case对应的值
如:switch(repField("org_code"),90,"社保科",91,"行政政法科",92,"企业科",93,"农业科",94,"经济建设科",95,"教科文科")

 

本文来自CSDN博客,转载出处:http://blog.csdn.net/adwfcu/archive/2008/11/19/3336481.aspx