码迷,mamicode.com
首页 > 数据库 > 详细

Oracle分析函数

时间:2017-10-24 19:27:30      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:sel   销售   into   tween   测试   acl   min   iss   arc   

先通过一个例子,直观的感受下分析函数的简洁方便:

create table CRISS_SALES
(
    DEPT_ID    VARCHAR2(6),     --部门号
    SALE_DATE  DATE,            --销售日期
    GOODS_TYPE VARCHAR2(4),     --货物类型
    SALE_CNT   NUMBER(10)       --销售数量
);

插入测试数据:

insert into CRISS_SALES values (D01, TO_DATE(20140304, YYYYMMDD), G00, 700);
insert into CRISS_SALES values (D02, TO_DATE(20140306, YYYYMMDD), G00, 500);
insert into CRISS_SALES values (D01, TO_DATE(20140408, YYYYMMDD), G01, 200);
insert into CRISS_SALES values (D02, TO_DATE(20140427, YYYYMMDD), G01, 300);
insert into CRISS_SALES values (D01, TO_DATE(20140430, YYYYMMDD), G03, 800);
insert into CRISS_SALES values (D02, TO_DATE(20140502, YYYYMMDD), G03, 900);
insert into CRISS_SALES values (D01, TO_DATE(20140504, YYYYMMDD), G02, 80);
insert into CRISS_SALES values (D02, TO_DATE(20140408, YYYYMMDD), G02, 100);

 需求:求出全公每个时点司累计的销售数量,利用分析函数SQL如下:

SELECT
    T.DEPT_ID ,
    T.SALE_DATE ,
    T.GOODS_TYPE ,
    T.SALE_CNT,
    SUM(SALE_CNT) OVER(ORDER BY SALE_DATE ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ALL_CMP_CNT
FROM
    CRISS_SALES T

结果如下:

技术分享

通过这个例子,可以看到利用分析函数解决某些场景下的问题非常的直观简便。

分析函数是什么?
分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。
分析函数和聚合函数的不同之处是什么?
普通的聚合函数用group by分组,每个分组返回一个统计值,而分析函数采用partition by分组,并且每组每行都可以返回一个统计值。
分析函数的形式?
分析函数带有一个开窗函数over(),包含三个分析子句:分组(partition by), 排序(order by), 窗口(rows) ,他们的使用形式如下:over(partition by xxx order by yyy rows between zzz and qqq)。

分析函数适用于哪些场景?
1.表内数据聚合累加
2.表内分组累加
3.分组排名
4.滚动统计
5.范围求值SUM MAX MIN
6.相邻行比较
等等...

 

Oracle分析函数

标签:sel   销售   into   tween   测试   acl   min   iss   arc   

原文地址:http://www.cnblogs.com/sooner/p/7725118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!