rollup函式的使用,rollup函式的使用

2022-06-20 18:06:40 字數 4717 閱讀 1232

1樓:go陌小潔

rollup():分組函式可以理解為group by的精簡模式,具體分組模式如下:

rollup(a,b,c): (a,b,c),(a,b),(a),(全表)

oracle rollup和cube 用法

oracle的group by語句除了最基本的語法外,還支援rollup和cube語句。如果是group by rollup(a, b, c)的話,首先會對(a、b、c)進行group by,然後對(a、b)進行group by,然後是(a)進行group by,最後對全表進行group by操作。

如果是group by cube(a, b, c),則首先會對(a、b、c)進行group by,然後依次是(a、b),(a、c),(a),(b、c),(b),(c),最後對全表進行group by操作。 grouping_id()可以美化效果。除了使用grouping函式,還可以使用grouping_id來標識group by的結果。

也可以 group by rollup(a,(b,c)) ,group by a rollup(b,c),…… 這樣任意按自己想要的形式結合統計資料,非常方便。

2樓:

oracle的group by語句除了最基本的語法外,還支援rollup和cube語句。如果是rollup(a, b, c)的話,首先會對(a、b、c)進行group by,然後對(a、b)進行group by,然後是(a)進行group by,最後對全表進行group by操作。如果是group by cube(a, b, c),則首先會對(a、b、c)進行group by,然後依次是(a、b),(a、c),(a),(b、c),(b),(c),最後對全表進行group by操作

rollup與cube函式

3樓:雪琳戀庚

rollup和cube 用法

oracle的group by語句除了最基本的語法外,還支援rollup和cube語句。如果是group by  rollup(a, b, c)的話,首先會對(a、b、c)進行group by,然後對(a、b)進行group by,然後是(a)進行group by,最後對全表進行group by操作。

如果是group by cube(a, b, c),則首先會對(a、b、c)進行group by,然後依次是(a、b),(a、c),(a),(b、c),(b),(c),最後對全表進行group by操作。 grouping_id()可以美化效果。除了使用grouping函式,還可以使用grouping_id來標識group by的結果。

也可以 group by rollup(a,(b,c)) ,group by a rollup(b,c),…… 這樣任意按自己想要的形式結合統計資料,非常方便。

rollup():分組函式可以理解為group by的精簡模式,具體分組模式如下:

rollup(a,b,c): (a,b,c),(a,b),(a),(全表)

cube():分組函式也是以group by為基礎,具體分組模式如下:

cube(a,b,c):(a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),(全表)

下面準備資料比較一下兩個函式的不同:

1、準備資料:

2、使用rollup函式查詢

select group_id,job,name,sum(salary) from group_test group by rollup(group_id,job,name);

3、使用cube函式:

select group_id,job,name,sum(salary) from group_test group by cube(group_id,job,name)

4、對比:從最後查詢出來的資料條數就差了好多,下面看一下將兩個函式從轉化成對應的group函式語句:

rollup函式:

select group_id,job,name,sum(salary) from group_test group by rollup(group_id,job,name);

等價於:

select group_id,job,name,sum(salary) from group_test group by group_id,job,name

union all

select group_id,job,null,sum(salary) from group_test group by group_id,job

union all

select group_id,null,null,sum(salary) from group_test group by group_id

union all

select null,null,null,sum(salary) from group_test

cube函式:

select group_id,job,name,sum(salary) from group_test group by cube(group_id,job,name) ;

等價於:

select group_id,job,name,sum(salary) from group_test group by group_id,job,name

union all

select group_id,job,null,sum(salary) from group_test group by group_id,job

union all

select group_id,null,name,sum(salary) from group_test group by group_id,name

union all

select group_id,null,null,sum(salary) from group_test group by group_id

union all

select null,job,name,sum(salary) from group_test group by job,name

union all

select null,job,null,sum(salary) from group_test group by job

union all

select null,null,name,sum(salary) from group_test group by name

union all

select null,null,null,sum(salary) from group_test

5、由此可見兩個函式對於匯**計來說要比普通函式好用的多,另外還有乙個配套使用的函式

grouping(**):當**欄位為null的時候值為1,當欄位**非null的時候值為0;

select grouping(group_id),job,name,sum(salary) from group_test group by rollup(group_id,job,name);

6、新增一列用來直觀的顯示所有的彙總字段:

select group_id,job,name,

case when name is null and nvl(group_id,0)=0 and job is null   then '全表聚合'

when name is null and nvl(group_id,0)=0 and job is not null then 'job聚合'

when name is null and  grouping(group_id)=0 and job is null then 'groupid聚合'

when name is not null and nvl(group_id,0)=0 and job is null   then 'name聚合'

when name is not null and grouping(group_id)=0 and job is null   then 'gropname聚合'

when name is not null and grouping(group_id)=1 and job is not null   then 'jobname聚合'

when name is  null and grouping(group_id)=0 and job is not null   then 'groupjob聚合'

else

'三列彙總' end ,

sum(salary) from group_test group by cube(group_id,job,name) ;

4樓:超塵離夢

1 oracle的group by語句除了最基本的語法外,還支援rollup和cube語句。如果是rollup(a, b, c)的話,首先會對(a、b、c)進行group by,然後對(a、b)進行group by,然後是(a)進行group by,最後對全表進行group by操作。如果是group by cube(a, b, c),則首先會對(a、b、c)進行group by,然後依次是(a、b),(a、c),(a),(b、c),(b),(c),最後對全表進行group by操作。

2 用group by grouping sets來代替group by cube。你可以應用來指定你感興趣的總數組合。因為它不必計算它不需要集合(也不會產生太多結果),所以對sql引擎來說更為高效。

其格式為:

group by grouping sets ((list), (list) ... )

這裡(list)是圓括號中的乙個列序列,這個組合生成乙個總數。要增加乙個總和,必須增加乙個(null)分組集。

if函式計算提成,使用if函式計算提成

假設訂單總額值寫在a1單元格,則另一單元格寫入公式 if a1 a1 if a1 10000,5 if a1 15000,10 15 excel中怎樣用if公式計算提成?a1為業績,b1計算提成,b1輸入公式 一,用if函式 a1 if a1 40000,if a1 80000,1 if a1 12...

C建構函式和析構函式的使用問題

注意我和你有些地方寫法不太一樣,建構函式我一般喜歡這樣寫。include class carray float getfloat int index re取浮點陣列中第index個元素,index從0開始 carray 析構函式,釋放動態分配的記憶體空間void print 分別輸出整形陣列和浮點陣...

EXCEL WEEKDAY函式的使用方法

在使用wps辦公中,excel如何使用weekday函式,操作方法如下。1 首先用wps office開啟excel,單元格輸入 weekday,滑鼠雙擊函式,如下圖所示。2 選擇函式的資料來源 日期序號 返回值型別11,如下圖所示。3 輸入完成之後,按enter確定鍵,如下圖所示。4 最後將單元格...