云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > oracle的分析函数over

oracle的分析函数over

  • 62 次阅读
  • 3 次下载
  • 2025/7/15 19:28:10

2 14 3 18 4 18 5 22 6 18 7 22 9 9

就是说,对于aa=5的一行 ,sum为 5-1<=aa<=5+2 的和 对于aa=2来说 ,sum=1+2+2+2+3+4=14 ;

又如 对于aa=9 ,9-1<=aa<=9+2 只有9一个数,所以sum=9 ; 3:其它:

over(order by salary rows between 2 preceding and 4 following) 每行对应的数据窗口是之前2行,之后4行 4:下面三条语句等效:

over(order by salary rows between unbounded preceding and unbounded following) 每行对应的数据窗口是从第一行到最后一行,等效:

over(order by salary range between unbounded preceding and unbounded following) 等效

over(partition by null)

常用的分析函数如下所列:

row_number() over(partition by ... order by ...) rank() over(partition by ... order by ...) dense_rank() over(partition by ... order by ...) count() over(partition by ... order by ...) max() over(partition by ... order by ...) min() over(partition by ... order by ...) sum() over(partition by ... order by ...) avg() over(partition by ... order by ...) first_value() over(partition by ... order by ...) last_value() over(partition by ... order by ...) lag() over(partition by ... order by ...) lead() over(partition by ... order by ...) 示例

SQL> select type,qty from test; TYPE QTY

---------- ---------- 1 6 2 9

SQL> select type,qty,to_char(row_number() over(partition by type order by qty))||'/'||to_char(count(*) over(partition by type)) as cnt2 from test; TYPE QTY CNT2

---------- ---------- ------------ 3 1/2 1 6 2/2 2 5 1/3 7 2/3 2 9 3/3

SQL> select * from test;

---------- ------------------------------------------------- 1 11111 2 22222 3 33333 4 44444

SQL> select t.id,mc,to_char(b.rn)||'/'||t.id)e 2 from test t,

(select rownum rn from (select max(to_number(id)) mid from test) connect by rownum <=mid ))L

4 where b.rn<=to_number(t.id) order by id

ID MC TO_CHAR(B.RN)||'/'||T.ID

--------- -------------------------------------------------- --------------------------------------------------- 1 11111 1/1 2 22222 1/2 2 22222 2/2 3 33333 1/3 3 33333 2/3 3 33333 3/3

44444 1/4 44444 2/4

4 44444 3/4CNOUG4 44444 4/4 10 rows selected

******************************************************************* 关于partition by

这些都是分析函数,好像是8.0以后才有的 row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序) rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 lag(arg1,arg2,arg3): arg1是从其他行返回的表达式 arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。 arg3是在arg2表示的数目超出了分组的范围时返回的值。

1.

select deptno,row_number() over(partition by deptno order by sal) from emp order by deptno; 2.

select deptno,rank() over (partition by deptno order by sal) from emp order by deptno; 3.

select deptno,dense_rank() over(partition by deptno order by sal) from emp order by deptno; 4.

select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) from emp ord er by deptno; 5.

select deptno,ename,sal,lag(ename,2,'example') over(partition by deptno order by ename) from em p order by deptno; 6.

select deptno, sal,sum(sal) over(partition by deptno) from emp;--每行记录后都有总计值 select deptno, sum(sal) from emp group by deptno; 7. 求每个部门的平均工资以及每个人与所在部门的工资差额 select deptno,ename,sal ,

round(avg(sal) over(partition by deptno)) as dept_avg_sal, round(sal-avg(sal) over(partition by deptno)) as dept_sal_diff from emp;

搜索更多关于: oracle的分析函数over 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

2 14 3 18 4 18 5 22 6

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com