分享
 
 
 

ORACLE OLAP函数语法的总结

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

Oracle OLAP 函数

最近这个东东用得非凡多,总结了一下 。

语法: FUNCTION_NAME(,,...)

OVER

()

OLAP函数语法四个部分:

1、function本身 用于对窗口中的数据进行操作;

2、partitioning clause 用于将结果集分区;

3、order by clause 用于对分区中的数据进行排序;

4、windowing clause 用于定义function在其上操作的行的集合,即function所影响的范围。

一、order by对窗口的影响

不含order by的:

SQL> select deptno,sal,sum(sal) over()

2 from emp;

不含order by时,默认的窗口是从结果集的第一行直到末尾。

含order by的:

SQL> select deptno,sal,

2 sum(sal) over(order by deptno) as sumsal

3 from emp;

当含有order by时,默认的窗口是从第一行直到当前分组的最后一行。

二、用于排列的函数

SQL> select empno, deptno, sal,

2 rank() over

3 (partition by deptno order by sal desc nulls last) as rank,

4 dense_rank() over

5 (partition by deptno order by sal desc nulls last) as dense_rank,

6 row_number() over

7 (partition by deptno order by sal desc nulls last) as row_number

8 from emp;

三、用于合计的函数

SQL> select deptno,sal,

2 sum(sal) over (partition by deptno) as sumsal,

3 avg(sal) over (partition by deptno) as avgsal,

4 count(*) over (partition by deptno) as count,

5 max(sal) over (partition by deptno) as maxsal

6 from emp;

四、开窗语句

1、rows窗口: "rows 5 preceding"

适用于任何类型而且可以order by多列。

SQL> select deptno,ename,sal,

2 sum(sal) over (order by deptno rows 2 preceding) sumsal

3 from emp;

rows 2 preceding:将当前行和它前面的两行划为一个窗口,因此sum函数就作 用在这三行上面

SQL> select deptno,ename,sal,

2 sum(sal) over

3 (partition by deptno order by ename rows 2 preceding) sumsal

4 from emp

5 order by deptno,ename;

加了partiton by分区后之后,rows 2 preceding(窗口)只在当前分区内生效,不会影响分区之外的行。

SQL> select ename,sal,hiredate,

2 first_value(ename)over

3 (order by hiredate asc rows 5 preceding) first_ename,

4 first_value(hiredate) over

5 (order by hiredate asc rows 5 preceding) first_hiredate

6 from emp

7 order by hiredate asc;

order by hiredate asc rows 5 preceding: order by之后,取当前行的前5行+当前行作为窗口(共6行)。

2、"range unbounded preceding"

range unbounded preceding会把当前行之前的所有行都包含进来,但当partition by时:

SQL> select deptno,ename,sal,

2 sum(sal) over

3 (partition by deptno order by deptno range unbounded preceding) sumsal

4 from emp;

SQL> select deptno,ename,sal,

2 sum(sal) over

3 (order by deptno range unbounded preceding) sumsal

4 from emp;

这SQL句子和下面这SQL是等价的:

select deptno,ename,sal,

sum(sal) over (order by deptno) sumsal

from emp;

因为order by的默认窗口总是从结果集的第一行开始到它分组的最后一行。

而partiton by的默认窗口总是从分区的第一行开始。

3、range窗口: "range 100 preceding"

这个子句只适用于number和date,而且只能order by一列。

假如over()里asc排列,意思是[number-100,number]这样一个闭区间是它的窗口。

假如over()里desc排列,意思是[number,number+100]这样一个闭区间是它的窗口。

4、窗口总结

1、unbounded preceding:从当前分区的第一行开始,到当前行结束。

2、current row:从当前行开始,也结束于当前行。

3、[numeric eXPression] preceding:对于rows来说从当前行之前的第[numeric expression]行开始,到当前行结束。对range来说从小于数值

表达式的值开始,到当前行结束。

4、[numeric expression] following:与[numeric expression] preceding相反。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有