ORACLE 中 DECODE 與 CASE WHEN THEN 用法

DECODE的語法:

DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value 等於if1時,DECODE函數的結果返回then1,...,如果不等於任何一個if值,則返回else。我們通過一些函數或計算替代value,是可以使DECODE函數具備大於、小於或等於功能。

Decode函數的語法結構如下:
decode (expression, search_1, result_1)
decode (expression, search_1, result_1, search_2, result_2)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)

decode (expression, search_1, result_1, default)
decode (expression, search_1, result_1, search_2, result_2, default)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)

decode函數比較表達式和搜索字,如果匹配,返回結果;如果不匹配,返回default值;如果未定義default值,則返回空值。

例如:1.比較大小

  select decode(sign(變量1-變量2),-1,變量1,變量2) from dual; --取較小值

  sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1

  例如:

  變量1=10,變量2=20

  則sign(變量1-變量2)返回-1,decode解碼結果爲“變量1”,達到了取較小值的目的。

2。求平均值

SELECT SSN, ROUND(AVG(DECODE(grade
,'A', 4
,'B', 3
,'C', 2
,0)),2)
FROM STUDENT_ADMIN.GRADE
GROUP BY SSN 

--------------

SELECT SSN, ROUND(AVG(CASE grade
WHEN 'A' THEN 4
WHEN 'B' THEN 3
WHEN 'C' THEN 2
ELSE 0
END),2)
FROM STUDENT_ADMIN.GRADE
GROUP BY SSN


大家熟悉一下用法即可。



發佈了34 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章