1. 程式人生 > >Oracle分析函數

Oracle分析函數

ren 求值 col to_date es2017 簡潔 font oracl .cn

先通過一個例子,直觀的感受下分析函數的簡潔方便:

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分析函數