標籤:
幹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