1. 程式人生 > >oracle分析函式系列之sum(col1) over(partition by col2 order by col3):實現分組彙總或遞增彙總

oracle分析函式系列之sum(col1) over(partition by col2 order by col3):實現分組彙總或遞增彙總

語法:sum(col1) over(partition by col2 order by col3 )

 準備資料:

   DEPT_ID    ENAME          SAL
1 1000            A                     2500
2 1000            B                    3500
3 1000            C                    1500
4 1000            D                    2000
5 2000            E                    2500
6 2000            F                    2000
7 2000           G                    3500

主要有四種情況:

sum(sal) over (partition by deptno order by ename) 按部門“連續”求總和
sum(sal) over (partition by deptno) 按部門求總和
sum(sal) over (order by deptno,ename) 不按部門“連續”求總和
sum(sal) over () 不按部門,求所有員工總和,效果等同於sum(sal)。

1.有partition by有order by :   在partition by分組下,按照不同的order by col3實現遞增彙總..    

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id order by ENAME) AS TOTAL  from  dept_sal  

結果:按照部門分組,按名字排序實現遞增彙總.       

DEPT_ID ENAME    SAL  TOTAL

1 1000       A           3500   3500
2 1000       B           3500  7000
3 1000       C          1500   8500
4 1000       D          2000  10500
5 2000       E          2500   2500
6 2000       F          2000   4500
7 2000       G         3500    8000       

如果col3重複會只加總一次(當然在本例中這種寫法毫無意義):

SQL>> select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id order by SAL) AS TOTAL from dept_sal     

DEPT_ID ENAME SAL TOTAL

11000 C 1500 1500
2 1000 D 2000 3500
3 1000 A 3500 10500
4 1000 B 3500 10500
5 2000 F 2000 2000
6 2000 E 2500 4500
7 2000 G 3500 8000

2.有partition by無order by:  實現分組內所有資料的彙總

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id) AS TOTAL from dept_sal     

DEPT_ID ENAME SAL TOTAL
1 1000 A 3500 10500
2 1000 B 3500 10500
3 1000 C 1500 10500
4 1000 D 2000 10500
5 2000 E 2500 8000
6 2000 F 2000 8000
7 2000 G 3500 8000

 3.無partition by有order by : 直接按order by 欄位實現遞增彙總

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(order by ENAME) AS TOTAL from dept_sal

    DEPT_ID ENAME SAL TOTAL
1 1000 A 3500 3500
2 1000 B 3500 7000
3 1000 C 1500 8500
4 1000 D 2000 10500
5 2000 E 2500 13000
6 2000 F 2000 15000
7 2000 G 3500 18500

如果order by 的值相同,會進行彙總,但彙總後顯示的值會是一樣的,如下:

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(order by DEPT_ID) AS TOTAL from dept_sal

    DEPT_ID ENAME SAL TOTAL
1 1000 A 3500 10500
2 1000 B 3500 10500
3 1000 C 1500 10500
4 1000 D 2000 10500
5 2000 E 2500 18500
6 2000 F 2000 18500
7 2000 G 3500 18500

 4.無partition by無order by:  所有資料相加.

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over() AS TOTAL from  dept_sal

    DEPT_ID ENAME SAL TOTAL
1 1000 A 3500 18500
2 1000 B 3500 18500
3 1000 C 1500 18500
4 1000 D 2000 18500
5 2000 E 2500 18500
6 2000 F 2000 18500
7 2000 G 3500 18500

相關推薦

oracle分析函式系列sum(col1) over(partition by col2 order by col3):實現分組彙總遞增彙總

語法:sum(col1) over(partition by col2 order by col3 )  準備資料:    DEPT_ID    ENAME          SAL 1 1000            A                     2500

oracle分析函式系列rank,dense_rank,row_number:實現排名策略

Rank,Dense_rank,Row_number函式為每條記錄產生一個從1開始至N的自然數,N的值可能小於等於記錄的總數。這3個函式的唯一區別在於當碰到相同資料時的排名策略。①ROW_NUMBER: Row_number函式返回一個唯一的值,當碰到相同資料時,排名按照

oracle分析函式系列LAG和LEAD:取出同一欄位的前N行的資料和後N行的值

Lag和Lead函式可以在一次查詢中取出同一欄位的前N行的資料和後N行的值。這種操作可以使用對相同表的表連線來實現,不過使用LAG和LEAD有更高的效率。以下是LAG和LEAD的例子: SQL> select  year,region,profit ,lag (pr

oracle sum(col1) over(partition by col2 order by col3):實現分組遞增彙總

應公司業務要求,需要對資料進行分組彙總做輔助列進行查詢 所以使用到了sum(col1) over(partition by col2 order by col3)函式,為了學習與提高在此進行記錄。 1、準備資料來源 CREATE TABLE TEST01 ( NAME VARCHAR(20

oracle 分析函式 over 用法

select * from test 資料: A B C 1 1 1 1 2 2 1 3 3 2 2 5 3 4 6 ---將B列值相同的對應的C 列值加總 select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum from test A B C C_SUM

oracle------分析函式和開窗函式over( )

一  什麼是分析函式   1  概念   分析函式是Oracle專門用於解決複雜報表統計需求的功能強大的函式,它可以在資料中進行分組然後計算基於組的某種統計值,並且每一組的每一行都可以返回一個統計值

Oracle 分析函式row_number() over (partition by order by )

1、格式 row_number() over(partition by 列名1 order by 列名2 desc) 2、解析 表示根據 列名1 分組,然後在分組內部根據 列名2 排序,而此函式計算的值就表示每組內部排序後的順序編號,可以用於去重複值 與r

筆記:oracle分析函式over

     select *     from (select d.*,                 rank() over(partition by group_id order by create_time desc) mm            from detail

oracle分析函式row_number() over()使用(2)

row_number() over ([partition by col1] order by col2) ) as 別名表示根據col1分組,在分組內部根據 col2排序而這個“別名”的值就表示每組內部排序後的順序編號(組內連續的唯一的),[partition by col1] 可省略。 以Scott/ti

oracle分析函式技術詳解(配上開窗函式over())

分析函式是什麼? 分析函式是Oracle專門用於解決複雜報表統計需求的功能強大的函式,它可以在資料中進行分組然後計算基於組的某種統計值,並且每一組的每一行都可以返回一個統計值。 分析函式和聚合函式的不同之處是什麼? 普通的聚合函式用group by分組,每個分組返回一

oracle分析函式over partition by 和group by的區別

今天看到一個老兄的問題, 大概如下: 查詢出部門的最低工資的userid 號 表結構: D號      工資      部門 userid salary   dept 1      2000      1 2      1000      1 3      500       2 4    

Oracle分析函式-nulls first/nulls last

select * from criss_sales; 通過rank()、dense_rank()、row_number()對記錄進行全排列、分組排列取值 但有時候,會遇到空值的情況,空值會影響得到的結果的正確性,如下所查。 select dept_id

Oracle分析函式-first_value()和last_value()

first_value()和last_value()字面意思已經很直觀了,取首尾記錄值。 例:查詢部門最早發生銷售記錄日期和最近發生的銷售記錄日期 select dept_id ,sale_date ,goods_type

[Oracle] 分析函式(2)- 開窗(WINDOWING)

SELECT emp_id,ename,dept_id,hire_date,sal, -- 以下均為首先按dept_id進行分組,其次按照hire_date進行排序,且所有統計不能跨越其所在分割槽,故不再重複 -- 視窗範圍為該分割槽的第一行到該分割槽的最後一行,與sum_sal_part等同 SUM

關於Oracle的一些內建函式在MySQL中的使用(row_number() over(partition by xxx order by xxx))

Oracle中:sys_guid():根據時間和機器碼生成全球唯一的序列號;  MySQL中為UUID()  Oracle中:nvl(s,1):s不為null則輸出s,否則輸出1 ; MySQL中為IFNULL(s,1) Oracle中:sysdate timestamp 標準時

[Oracle] 分析函式(1)- 語法

語法概述 Analytic-Function Analytic_Clause之PARTITION子句 Analytic_Clause之ORDER BY子句 Analytic_Clause之WINDOWING子句 舉例: 下面看一個例子簡單過下語法: 例:

oracle分析函式彙總

一、分析函式語法function_name(<argument>,<argument>...) over(<partition_Clause><order by_Clause><windowing_Clause>);

Oracle分析函式五——統計分析函式

原創於2009年08月02日,2009年10月22日遷移至此。 Oracle 分析函式——統計分析函式 方差和標準差: 樣本中各資料與樣本平均數的差的平方和的平均數叫做樣本方差;樣本方差的算術平方根叫做樣本標準差。樣本方差和樣本標準差都是衡量一個樣本波動大小

Oracle分析函式

基本語法:     函式名稱([引數, ...])over(             partition by 子句 欄位, ...             [order by 子句 欄位, ...[asc|desc][nulls first|nulls last]]   

oracle 分析函式、GROUPING函式

分析函式 over(Partition by...) 一個超級牛皮的ORACLE特有函式。 天天都用ORACLE,用了快2年了。最近才接觸到這個功能強大而靈活的函式。真實慚愧啊! oracle的分析函式over 及開窗函式 一:分析函式over Oracle從8.1.6開始提供分析函式