grouping函式可以接受一列,返回0或者1。如果列值為空,那麼grouping()返回1;如果列值非空,那麼返回0。grouping只能在使用rollup或cube的查詢中使用。當需要在返回空值的地方顯示某個值時,grouping()就非常有用。
1、在rollup中對單列使用grouping()
sql>select division_id,sum
(salary)
2from
employees2
3group
byrollup(division_id)
4order
bydivision_id;
div
sum(salary)
--- -----------
bus 1610000
ope
1320000
sal
4936000
sup
1015000
8881000
加上grouping來看看
sql>select
grouping(division_id),division_id,sum
(salary)
2from
employees2
3group
byrollup(division_id)
4order
bydivision_id;
grouping(division_id) div sum
(salary)
--------------------- --- -----------
0 bus 1610000
0 ope 1320000
0 sal 4936000
0 sup 1015000
18881000
可以看到,為空的地方返回1,非空的地方返回0。
2、使用case轉換grouping()的返回值
可能你會覺得前面的0和1太枯燥了,代表不了任何意義,說白了就是不夠人性化,呵呵。這個時候我們可以使用case來轉換為一些有意義的值。
sql>select
2case
grouping
(division_id)
3when
1then
'all divisions'4
else
division_id
5end
asdiv,
6sum
(salary)
7from
employees2
8group
byrollup(division_id)
9order
bydivision_id;
div
sum(salary)
------------- -----------
bus 1610000
ope
1320000
sal
4936000
sup
1015000
all divisions 8881000
3、使用case和grouping()轉換多個列的值
sql>select
2case
grouping
(division_id)
3when
1then
'all divisions'4
else
division_id
5end
asdiv,
6case
grouping
(job_id)
7when
1then
'all jobs'8
else
job_id
9end
asjob,
10sum
(salary)
11from
employees2
12group
byrollup(division_id,job_id)
13order
bydivision_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
2case
grouping
(division_id)
3when
1then
'all divisions'4
else
division_id
5end
asdiv,
6case
grouping
(job_id)
7when
1then
'all jobs'8
else
job_id
9end
asjob,
10sum
(salary)
11from
employees2
12group
bycube(division_id,job_id)
13order
bydivision_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)
2from
employees2
3group
bygrouping
sets(division_id,job_id)
4order
bydivision_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 就非常有用。關於rollup和cube函式的使用,請參見我的另一篇...
WaitForSingleObject函式的使用
程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...