作者:LucifinilC_925 | 来源:互联网 | 2023-09-24 18:36
原文链接:
http://www.2cto.com/database/201301/183036.html
已知表TB的数据如下:
SQL> select * from tb;
ID CHINESE MATH ENGLISH
---------- ---------- ---------- ----------
1001 89 98 87
1002 81 87 79
现在要得到如下的结果:
ID CHINESE MATH ENGLISH MAX MIN
---------- ---------- ---------- ---------- ---------- ----------
1001 89
98 87 98 87
1002 81 87 79 87 79
该怎么解决?
首先自然想到用MAX和MIN函数,但这两个是聚集函数,是要作用在同一列上面的,而现在要得到的MAX和MIN的值却是作用于每一行上面的,如果要借助于MAX()和 MIN(),还需要对原表的数据结构进行行转列处理,复杂度上升。
Oracle提供了如下函数:
SQL> SELECT id, chinese, math, english,
greatest(chinese, math, english) max,
least(chinese, math, english) min
FROM tb;
ID CHINESE MATH ENGLISH MAX MIN
---------- ---------- ---------- ---------- ---------- ----------
1001 89 98 87 98 87
1002 81 87 79 87 79