Oracle學習記錄 十 進階分組學習

來源:互聯網
上載者:User

標籤:

  1. group by cube

先執行一個語句看一下:

select deptno, job, sum(sal) sal from emp

group by cube(deptno, job)

order by sal;

這個輸出結果可以看到,有deptno為空白的,有job為空白的,還有都為空白的,當然還有兩者都有的。

http://honeybinshun.iteye.com/blog/1474242

先對deptno,job進行group by 這個就是兩者都有的那些項,然後對deptno進行group by,這個就是只有deptno那些項,

然後對job進行group by,這個就是只有job的那些項,然後還會求一次不group by 的,就是兩者都為空白的那項。

2. group by rollup

先執行一下這個:

select deptno, job, sum(sal) sal from emp

group by cube(deptno, job)

order by sal;

這裡結果中有deptno,job都有的項,有只有deptno的項,還有兩者都沒有的項

執行是這樣的,先對deptno,job進行group by,這樣產生兩者都有的項,然後對deptno執行group by,這樣

產生只有deptno的項,然後還有一個是不group by 的,就是兩者都為空白的那項


其中,cube和rollup中可以有多個元素,

cube(A,B,C):(A,B,C)(A,B),(A,C),(A),(B,C),(B),(C)  這是它的group by情況 外加一次不group by

rollup(A,B,C): (A,B,C) (A,B) (A) 這是它的group by 情況,外加一次不group by的


3. grouping

這個是用來檢查一行資料是否是cube產生的NULL,什麼情況下需要這個呢?

想一下,剛才例子中,有時候是兩者都有的項,有些是只有一者的項,那麼,如果在原資料中,就是只有一者呢,

這樣就無法區別開是原資料,還是彙總後的資料了,所以用grouping來區別,是就返回1,不是就返回0

http://www.cnblogs.com/li-peng/p/3298303.html

select deptno, job, sum(sal) sal, decode(grouping(deptno), 1, ‘Y‘, ‘N‘)

from emp

group by cube(deptno, job)

order by sal;

在這個結果中,只有deptno顯示為空白的項後面是Y,其他的都是N,這是因為本身deptno原資料中就沒有是NULL的

顯示Y的是因為現在deptno是NULL,說明是彙總產生的,顯示N是因為這不是彙總產生的NULL或者這個根本不是NULL,

在這裡就是因為deptno的值不是NULL,所以後面顯示了N。









Oracle學習記錄 十 進階分組學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.