程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle group 語句探究(筆記),oraclegroup

oracle group 語句探究(筆記),oraclegroup

編輯:Oracle教程

oracle group 語句探究(筆記),oraclegroup


1、group by語句在oracle中沒有排序功能,必須依靠order by才能實現按照預定結果的排序

2、group by 的cube擴展

 1 with test as
 2 (
 3     select 1 id,2 name from dual
 4 )
 5 select id,name from test group by cube(id,name);
 6 
 7 輸出結果為
 8 id      name
 9 null    null
10 1        null
11 null    2
12 1        2

 

由此不難看出group by cube的作用是把null引入做一個笛卡爾積,最終顯示出來,在有些情況下用起來非常的方便,在某些情況下可以替代union all,極高的提升效率。其中在數據量比較多的情況下,全空列只出現一次

3、grouping()函數

grouping() 與cube一起使用,用來判斷這個值是不是聚合產生的null值,如果是返回1,不是返回零

 1 with test as
 2 (
 3     select 1 id,2 name from dual
 4 )
 5 select id,name from test 
 6 group by cube(id,name) 
 7 having grouping(id)=1;
 8 
 9 輸出結果為
10 id      name
11 null    null
12 null    2
13 
14 
15 with test as
16 (
17     select 1 id,2 name from dual
18 )
19 select id,name from test 
20 group by cube(id,name) 
21 having grouping(id)=0;
22 
23 輸出結果為
24 id      name
25 1        null
26 1        2

4、grouping_id()函數

grouping_id()在某種程度上與grouping()相似,不同的在於grouping()計算一個表達式返回0或1,而group_id()計算一個表達式,確定其參數中的哪一行被用來生成超聚合行,然後常見一個矢量,並將該值作為整型值返回

 1 with test as
 2 (
 3     select 1 id,2 name from dual
 4 ),
 5 cuded as(
 6     select 
 7         grouping_id(id,name) gid,
 8         to_char(grouping(id)) id_1,
 9         to_char(grouping(name)) name_1,
10         decode(grouping(id),1,' id 1') id_2,
11         decode(grouping(name),1,' name 2') name_2
12       from test   
13       group by cude(id,name)
14 )
15 select
16     gid,id_1||name_1 dn,id_2,name_2
17 from
18 cuded;
19 
20 結果為:
21 gid        dn        id_2        name_2
22 0          00   
23 1          01                    name 2
24 2          10       id 1
25 3          11       id 1         name 2
26         

 

    

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved