1. 程式人生 > >Oracle中取多個欄位多個列最大值最小值的方法

Oracle中取多個欄位多個列最大值最小值的方法

已知表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函式
,但是顯然這兩個是聚集函式 ,是要作用在同一個column的一個Group上面的,而現在要得到的MAX和MIN的值卻是作用於每一行上面的,如果要藉助於MAX()和 MIN()的話,還需要對原表的資料結構進行下處理(先進行轉列操作unpivot),但是顯然不是很好。

看到有個網友回帖用greatest 和 least函式 來做,真是簡潔漂亮,也為自己的孤陋寡聞而狂汗呀

解決方式如下


SQL> SELECT id, chinese, math, english,
   2       greatest (chinese, math, english) max,
   3       least(chinese, math, english) min
   4   FROM tb;

       ID CHINESE    MATH ENGLISH        MAX        MIN
---------- ---------- ---------- ---------- ---------- ----------
   1001       89       98       87       98       87
   1002       81       87       79       87       79