oracle group by rollup,decode,grouping,nvl,nvl2,nullif,grouping_id,group_id,grouping sets,RATIO_TO

來源:互聯網
上載者:User

標籤:

幹oracle 047文章12當問題,經驗group by 聲明。因此邂逅group by  rollup,decode,grouping,nvl,nvl2,nullif,RATIO_TO_REPORT等一下。

 

1. decode  與if...then,case...when...這類流資料語句功能差點兒相同

decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,預設值)

該函數的含義例如以下:
IF 條件=值1 THEN
    RETURN(值1)
ELSIF 條件=值2 THEN
    RETURN(值2)
    ......
ELSIF 條件=值n THEN
    RETURN(值n)
ELSE
    RETURN(預設值)
END IF

 

decode(欄位或欄位的運算,值1。值2,值3)

這個函數執行的結果是。當欄位或欄位的運算的值等於值1時,該函數返回值2,否則返回值3
當然值1。值2,值3也能夠是運算式

 

----比較大小

select decode(sign(變數1-變數2),-1,變數1,變數2) from dual; --取較小值
sign()函數依據某個值是0、正數還是負數,分別返回0、1、-1

---依據固定值進行排序 order by

select * from table_subject order by decode(subject_name, ‘語文‘, 1, ‘數學‘, 2, , ‘外語‘,3) ;

 

2. group by rollup ,grouping,grouping_id,group_id,grouping set,GROUP BY CUBE彙總函式,還可參考OVER (PARTITION BY),這個是可返回多行的彙總函式,比較深一點,連結:http://blog.csdn.net/fengeh/article/details/24934437

 

rollup:為每一個分組返回一個小計,同一時候為全部分組返回總計;
比如:group by rollup(A,B)

grouping 接收列作為參數,假設列為空白,則grouping返回1,否則返回0。該函數與rollup搭配使用。
比如:SQL> SELECT DECODE(GROUPING(EMP_ID), 1, ‘全部員工‘, EMP_ID) EMP_ID, 

 nvl2(emp_id,DECODE(GROUPING(MONTH), 1, ‘員工年度‘, MONTH),‘全部員工年度‘) ND,
 SUM(AMOUNT)  FROM ALL_SALES  GROUP BY ROLLUP(EMP_ID, MONTH);

 

GROUPING_ID()函數能夠接受一列或多列,返回GROUPING位向量的十進位值。GROUPING位向量的計算方法是將依照順序對每一列調用GROUPING函數的結果組合起來,GOURPING位向量計算,功能與grouping差點兒相同,格式為GROUPING_ID(欄位A,欄位B,欄位C...)

例如以下例所看到的

grade         id          位向量      GROUPING_ID()返回值

非空                     非空              00             0

非空                     空                 01             1

空                        非空              10             2

空                        空                 11             3

 

GROUP_ID() 唯一標識反覆組,功能與grouping差點兒相同,只是此欄位是依據是否有反覆資料來推斷的,反覆資料就判為1,不反覆則為0.

 

grouping sets 類似於union all,不去重。用於group by後面,比如:
 group by grouping sets((STOCK_ID), (STOCK_ID, TYPE_CD, DISCOUNT)));

整合全部可能性,比如:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ2Vo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

 

3.nvl nvl2 nullif 都是NULL欄位的處理方法

NULL指的是空值。或者非法值。
NVL (expr1, expr2)->expr1為NULL。返回expr2;不為NULL,返回expr1。注意兩者的類型要一致
NVL2 (expr1, expr2, expr3) ->expr1不為NULL,返回expr2;為NULL,返回expr3。expr2和expr3類型不同的話,expr3會轉換為expr2的類型
NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1

4.RATIO_TO_REPORT解析函數,經經常使用於百分比求數

ratio_to_report(欄位) OVER (PARTITION BY customer_id)    ------PARTITION BY等於group by

著作權聲明:本文博主原創文章,部落格,未經同意不得轉載。

oracle group by rollup,decode,grouping,nvl,nvl2,nullif,grouping_id,group_id,grouping sets,RATIO_TO

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.