文章目录

  • 一、背景
  • 二、创建测试数据
    • 2.1 测试数据创建脚本
    • 2.2 测试数据详情
  • 三、相关需求及SQL示例
    • 3.1 统计当季总处置金额
    • 3.2 统计当季初至当月累计处置金额
    • 3.3 统计每月与上月的变动额
  • 四、其它参考资料
  • 五、我的学习心得

一、背景

分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。
在本文,我会通过几个小需求,介绍一些分析函数的用法,以及我的一些学习心得。对于函数更详尽的用法,可参考本文第四点。

二、创建测试数据

2.1 测试数据创建脚本

-- MONEY_PER_MONTH 是100到200之间的随机整数
CREATE TABLE TMP AS
SELECT RPT_DT,MONEY_PER_MONTH,TO_CHAR(TO_DATE(RPT_DT,'YYYYMMDD'),'Q') QUARTER
FROM
(SELECT '2019'||LPAD(LEVEL,2,'0')||'01' RPT_DT FROM DUAL CONNECT BY LEVEL <=12) TMP1,
(SELECT TRUNC(DBMS_RANDOM.VALUE(100,200)) MONEY_PER_MONTH FROM DUAL) TMP2;

2.2 测试数据详情

RPT_DT MONEY_PER_MONTH QUARTER
20190101 151 1
20190201 180 1
20190301 142 1
20190401 101 2
20190501 160 2
20190601 148 2
20190701 109 3
20190801 144 3
20190901 164 3
20191001 195 4
20191101 126 4
20191201 139 4

三、相关需求及SQL示例

3.1 统计当季总处置金额

-- SQL1:该SQL第3列表达的是当季总处置金额
SELECT RPT_DT,QUARTER,
SUM(MONEY_PER_MONTH) OVER(PARTITION BY QUARTER ORDER BY RPT_DT ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) "本季累计处置金额"
FROM TMP;

SQL1的数据结果:

RPT_DT 本季累计处置金额 QUARTER
20190101 473 1
20190201 473 1
20190301 473 1
20190401 409 2
20190501 409 2
20190601 409 2
20190701 417 3
20190801 417 3
20190901 417 3
20191001 460 4
20191101 460 4
20191201 460 4

3.2 统计当季初至当月累计处置金额

-- SQL2:该SQL第3列表达的是当季季初(含)至当月(含)累计处置金额
SELECT RPT_DT,QUARTER,
SUM(MONEY_PER_MONTH) OVER(PARTITION BY QUARTER ORDER BY RPT_DT ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) "本季初至当月累计处置金额"
FROM TMP;

SQL2的数据结果:

RPT_DT 本季初至当月累计处置金额 QUARTER
20190101 151 1
20190201 331 1
20190301 473 1
20190401 101 2
20190501 261 2
20190601 409 2
20190701 109 3
20190801 253 3
20190901 417 3
20191001 195 4
20191101 321 4
20191201 460 4

3.3 统计每月与上月的变动额

-- SQL3:统计每月相较上月的变动额
SELECT RPT_DT,QUARTER,
MONEY_PER_MONTH- LAG(MONEY_PER_MONTH) OVER(ORDER BY RPT_DT) "当月相较上月变动额"
FROM TMP;

SQL3的数据结果:

RPT_DT 当月相较上月变动额 QUARTER
20190101 1
20190201 29 1
20190301 -38 1
20190401 -41 2
20190501 59 2
20190601 -12 2
20190701 -39 3
20190801 35 3
20190901 20 3
20191001 31 4
20191101 -69 4
20191201 13 4

四、其它参考资料

关于Oracle分析函数的更多知识点,大家可以上网搜索一下,比如可参考这篇文章

https://blog.csdn.net/cc_0101/article/details/80884076
https://www.cnblogs.com/cjm123/p/8033892.html

五、我的学习心得

所有分析函数,完成掌握,实际上也没有必要,很多时候我们都用20%的技术解决80%的问题。我们得**先对分析函数有一个整体的概念,比如它都有些什么函数,能解决哪些数据需求,工作中常见数据库产品对分析函数的支持程度如何。**另外,多思考,如果不依赖数据库,面对类似的数据需求,用Java、Python、Excel有什么样的解决方案。
其它我认为要掌握的知识有:dense_rank()、rank() over()、row_number() over() 、lag() over()、lead() over()。
创建测试数据的方法,可以学习一下。
上文SQL3的数据需求,附上Python的pandas解决方案,用diff()这个好轮子。

import pandas as pd
df=pd.DataFrame({'month':[1,2,3,4,5,6],'money':[151,180,142,101,160,148]})
print(df)
print(df.diff()) #df.diff() = df – df.shift()

Oracle分析函数相关推荐

  1. Oracle分析函数五——统计分析函数

    Oracle 分析函数--统计分析函数 方差和标准差:     样本中各数据与样本平均数的差的平方和的平均数叫做样本方差:样本方差的算术平方根叫做样本标准差.样本方差和样本标准差都是衡量一个样本波动大 ...

  2. oracle 四分位函数,Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…

    Oracle 分析函数--函数RANK,DENSE_RANK,FIRST,LAST- RANK 功能描述:根据 ORDER BY 子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置.组内 ...

  3. 【分析函数】Oracle分析函数之LAG和LEAD

    [分析函数]Oracle分析函数之LAG和LEAD Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值.这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的 ...

  4. oracle 数据分析函数,ORACLE分析函数(一)

    ORACLE分析函数(1) 分析函数式ORACLE提供的用来进行数据统计的强有力工具,与我们常用的聚合函数具有一些相似性,但又完全不同.聚合函数,首先会将数据进行分组,然后对每一组数据进行运算,如求和 ...

  5. Oracle分析函数巧妙使用

    在 Oracle中使用Sql必须弄懂分析函数 Oracle开发专题之:分析函数(OVER) 1 Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) 6 Or ...

  6. Oracle 分析函数--Row_Number()

    row_number() over ([partition by col1] order by col2) ) as 别名 表示根据col1分组,在分组内部根据 col2排序 而这个"别名& ...

  7. Oracle分析函数——函数列表

    --------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...

  8. Oracle分析函数三——SUM,AVG,MIN,MAX,COUNT

    Oracle 分析函数--SUM,AVG,MIN,MAX,COUNT SUM 功能描述:该函数计算组中表达式的累积和. SAMPLE :下例计算同一经理下员工的薪水累积值 MIN 功能描述:在一个组中 ...

  9. oracle 分析函数、GROUPING函数

    分析函数 over(Partition by...) 一个超级牛皮的ORACLE特有函数.天天都用ORACLE,用了快2年了.最近才接触到这个功能强大而灵活的函数.真实惭愧啊!oracle的分析函数o ...

  10. Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…

    Oracle分析函数--函数RANK,DENSE_RANK,FIRST,LAST- RANK 功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置.组内的数据 ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.5-信息管理
  2. 下载python的步骤ios_下载及安装Python详细步骤
  3. 百度2014校园招聘笔试题(成都站,软件研发岗)——2014.09.21
  4. package.json
  5. 深度学习之基于Tensorflow2.0实现ResNet50网络
  6. mysql数据库密码错误_MySQL数据库经典错误六 数据库密码忘记的问题
  7. 产品经理的职责(转)
  8. 力扣-61 旋转链表
  9. CSS 相邻选择器(七)
  10. FineReport10 决策报表常用javascript脚本
  11. 三星手机性能测试软件,5部手机性能测试:红米垫底三星倒数第三 第一当之无愧...
  12. baiduRanking多站点批量百度排名查询
  13. 深度解析论文 基于 LSTM 的 POI 个性化推荐框架
  14. php购物车登录用cookie,php利用cookies实现购物车的方法_PHP
  15. Exchange Server 2013 运维系列——恢复已删除或禁用的邮箱
  16. 免费的C++库—备用记录
  17. 如何优雅的处理错误逻辑
  18. vue双向绑定问题,修改数据时改变了原数据
  19. C型钢市场前景分析及行业研究报告
  20. 【pygame游戏开发】这几个经典游戏,勾起了少年的快乐

热门文章

  1. 计算机二级c语言考试真题及答案详解,2021全国计算机二级C语言程序设计历年真题及答案节选...
  2. 如何学好游戏编程 一
  3. 破解还原卡的方法总结!!
  4. nginx 代理部署前端项目
  5. 《Python 快速入门》C站最全Python标准库总结
  6. css3径向渐变详解-遁地龙卷风
  7. CPLEX——关键字
  8. matlab仿真零中频接收机技术,经典又实用的零中频接收机的技术解决方案
  9. 如何成为一个很厉害的人?采铜详述13个思维法则
  10. 最终幻想14钓鱼辅助脚本(非外挂)