ORACLE GROUPING函式的使用

2021-05-27 07:11:26 字數 4834 閱讀 4949

grouping函式可以接受一列,返回0或者1。如果列值為空,那麼grouping()返回1;如果列值非空,那麼返回0。grouping只能在使用rollup或cube的查詢中使用。當需要在返回空值的地方顯示某個值時,grouping()就非常有用。

關於rollup和cube函式的使用,請參見我的另一篇文章。

1、在rollup中對單列使用grouping()

sql> select division_id,sum(salary)

2  from employees2

3  group by rollup(division_id)

4  order by division_id;

div sum(salary)

--- -----------

bus     1610000

ope     1320000

sal     4936000

sup     1015000

8881000

加上grouping來看看

sql> select grouping(division_id),division_id,sum(salary)

2  from employees2

3  group by rollup(division_id)

4  order by division_id;

grouping(division_id) div sum(salary)

--------------------- --- -----------

0 bus     1610000

0 ope     1320000

0 sal     4936000

0 sup     1015000

1         8881000

可以看到,為空的地方返回1,非空的地方返回0。

2、使用case轉換grouping()的返回值

可能你會覺得前面的0和1太枯燥了,代表不了任何意義,說白了就是不夠人性化,呵呵。這個時候我們可以使用case來轉換為一些有意義的值。

sql> select

2  case grouping(division_id)

3  when 1 then 'all divisions'

4  else division_id

5  end as div,

6  sum(salary)

7  from employees2

8  group by rollup(division_id)

9  order by division_id;

div           sum(salary)

------------- -----------

bus               1610000

ope               1320000

sal               4936000

sup               1015000

all divisions     8881000

3、使用case和grouping()轉換多個列的值

sql> select

2  case grouping(division_id)

3  when 1 then 'all divisions'

4  else division_id

5  end as div,

6  case grouping(job_id)

7  when 1 then 'all jobs'

8  else job_id

9  end as job,

10  sum(salary)

11  from employees2

12  group by rollup(division_id,job_id)

13  order by division_id,job_id;

div           job      sum(salary)

------------- -------- -----------

bus           mgr           530000

bus           pre           800000

bus           wor           280000

bus           all jobs     1610000

ope           eng           245000

ope           mgr           805000

ope           wor           270000

ope           all jobs     1320000

sal           mgr          4446000

sal           wor           490000

sal           all jobs     4936000

div           job      sum(salary)

------------- -------- -----------

sup           mgr           465000

sup           tec           115000

sup           wor           435000

sup           all jobs     1015000

all divisions all jobs     8881000

16 rows selected.

4、cube與grouping()結合使用

sql> select

2  case grouping(division_id)

3  when 1 then 'all divisions'

4  else division_id

5  end as div,

6  case grouping(job_id)

7  when 1 then 'all jobs'

8  else job_id

9  end as job,

10  sum(salary)

11  from employees2

12  group by cube(division_id,job_id)

13  order by division_id,job_id;

div           job      sum(salary)

------------- -------- -----------

bus           mgr           530000

bus           pre           800000

bus           wor           280000

bus           all jobs     1610000

ope           eng           245000

ope           mgr           805000

ope           wor           270000

ope           all jobs     1320000

sal           mgr          4446000

sal           wor           490000

sal           all jobs     4936000

div           job      sum(salary)

------------- -------- -----------

sup           mgr           465000

sup           tec           115000

sup           wor           435000

sup           all jobs     1015000

all divisions eng           245000

all divisions mgr          6246000

all divisions pre           800000

all divisions tec           115000

all divisions wor          1475000

all divisions all jobs     8881000

21 rows selected.

5、使用grouping sets子句

使用grouping sets子句可以只返回小計記錄。

sql> select division_id,job_id,sum(salary)

2  from employees2

3  group by grouping sets(division_id,job_id)

4  order by division_id,job_id;

div job sum(salary)

--- --- -----------

bus         1610000

ope         1320000

sal         4936000

sup         1015000

eng      245000

mgr     6246000

pre      800000

tec      115000

wor     1475000

9 rows selected.

ORACLE GROUPING函式的使用

grouping函式可以接受一列,返回0或者1。如果列值為空,那麼grouping 返回1 如果列值非空,那麼返回0。grouping只能在使用rollup或cube的查詢中使用。當需要在返回空值的地方顯示某個值時,grouping 就非常有用。關於rollup和cube函式的使用,請參見我的另一篇...

ORACLE GROUPING函式的使用

grouping函式可以接受一列,返回0或者1。如果列值為空,那麼grouping 返回1 如果列值非空,那麼返回0。grouping只能在使用rollup或cube的查詢中使用。當需要在返回空值的地方顯示某個值時,grouping 就非常有用。1 在rollup中對單列使用grouping sql...

WaitForSingleObject函式的使用

程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...