度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1116|回复: 2
打印 上一主题 下一主题

[分享] Oracle的over子函数的妙用

[复制链接]

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
跳转到指定楼层
楼主
发表于 2020-3-20 15:54:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fteair 于 2017-4-20 15:55 编辑

  • oracle的over 子函数可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序,其中PARTITION BY 为分组字段,ORDER BY 指定排序字段这对统计分析这类问题意想不到的效果.
  • over函数的妙用
      例1: 累计求和

select fdate 日期,total 金额,tax 税额,sum(total) over (order by fdate) 累计金额,sum(tax) over (order by fdate) 累计税额
from
( select fildate fdate,sum(total) total,sum(tax) tax from stkin t group by fildate )
order by fdate;


      例2:累计求和月分组统计

select fdate 日期,total 金额,tax 税额,sum(total) over (order by fdate) 累计金额,sum(tax) over (order by fdate) 累计税额,sum(total) over (partition by yymm order by fdate) 本月累计金额,
sum(tax) over (partition by yymm order by fdate) 本月累计税额,yymmfrom (select fildate fdate,to_char(fildate,'yyyy-mm') yymm,sum(total) total,sum(tax) tax from stkin t group by fildate)
order by fdate,yymm;


      例3:占比计算

select fdate 日期,total 金额,tax 税额,sum(total) over (order by fdate,yymm) 累计金额,sum(tax) over (order by fdate,yymm) 累计税额,sum(total) over (partition by yymm order by fdate,yymm) 本月累计金额,sum(tax) over (partition by yymm order by fdate,yymm) 本月累计税额,sum(total) over () 累计金额,100*round(total/sum(total) over (),4) 占比,100*round(total/sum(total) over (partition by yymm),4) 月占比,yymmfrom (select fildate fdate,to_char(fildate,'yyyy-mm') yymm,sum(total) total,sum(tax) tax from stkin t group by fildate)
order by fdate,yymm;


      注1:partition by 表示分组
      注2:在"... from emp;"后面不要加order by 子句,使用的分析函数的(partition by yymm order by fdade,yymm)里已经排序的语句了,如果再在句尾添加排序子句,一致倒罢了,不一致,结果就令人费劲了.
      2.利用 lag(),lead() 取上下n条记录取值
      例1:

select fdate 日期,total 金额,tax 税额,lag(total,1,null) over(order by fdate) 上1条记录金额,lead(total,1,null) over(order by fdate) 下1条记录金额,yymmfrom (select fildate fdate,to_char(fildate,'yyyy-mm') yymm,sum(total) total,sum(tax) tax from stkin tgroup by fildate) order by fdate,yymm;

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
沙发
发表于 2020-3-20 17:03:38 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
板凳
 楼主| 发表于 2020-3-21 17:16:14 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-28 08:21 , Processed in 0.135821 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表