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
大家熟悉一下用法即可。