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)
例如: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 gradeWHEN 'A' THEN 4
WHEN 'B' THEN 3
WHEN 'C' THEN 2
ELSE 0
END),2)
FROM STUDENT_ADMIN.GRADE
GROUP BY SSN
大家熟悉一下用法即可。