黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

ORACLE GROUPING函數(shù)的使用

系統(tǒng) 2245 0

原文: http://blog.csdn.net/wh62592855/article/details/4818072

?

GROUPING函數(shù)可以接受一列,返回0或者1。如果列值為空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查詢中使用。當(dāng)需要在返回空值的地方顯示某個(gè)值時(shí),GROUPING()就非常有用。

?

關(guān)于ROLLUP和CUBE函數(shù)的使用,請(qǐng)參見我的另一篇文章。

http://blog.csdn.net/wh62592855/archive/2009/11/16/4817920.aspx

?

1、在ROLLUP中對(duì)單列使用GROUPING()

SQL> select division_id,sum(salary)
? ? from employees2
? ? group by rollup(division_id)
? ? 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)
? ? from employees2
? ? group by rollup(division_id)
? ? 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轉(zhuǎn)換GROUPING()的返回值

可能你會(huì)覺得前面的0和1太枯燥了,代表不了任何意義,說白了就是不夠人性化,呵呵。這個(gè)時(shí)候我們可以使用CASE來轉(zhuǎn)換為一些有意義的值。

SQL> select
? ? case grouping(division_id)
? ? when 1 then 'all divisions'
? ? else division_id
? ? end as div,
? ? sum(salary)
? ? from employees2
? ? group by rollup(division_id)
? ? order by division_id;

?

DIV?????????? SUM(SALARY)
------------- -----------
BUS?????????????? 1610000
OPE?????????????? 1320000
SAL?????????????? 4936000
SUP?????????????? 1015000
all divisions???? 8881000

?

3、使用CASE和GROUPING()轉(zhuǎn)換多個(gè)列的值

SQL> select
? ? case grouping(division_id)
? ? when 1 then 'all divisions'
? ? else division_id
? ? end as div,
? ? case grouping(job_id)
? ? when 1 then 'all jobs'
? ? else job_id
? ? end as job,
? ?sum(salary)
? ?from employees2
? ?group by rollup(division_id,job_id)
? ?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()結(jié)合使用

SQL> select
? ? case grouping(division_id)
? ? when 1 then 'all divisions'
? ? else division_id
? ? end as div,
? ? case grouping(job_id)
? ? when 1 then 'all jobs'
? ? else job_id
? ? end as job,
? ?sum(salary)
? ?from employees2
? ?group by cube(division_id,job_id)
? ?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子句可以只返回小計(jì)記錄。

SQL> select division_id,job_id,sum(salary)
? ? from employees2
? ? group by grouping sets(division_id,job_id)
? ? 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函數(shù)的使用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論