Oracle中取多個欄位多個列最大值最小值的方法
阿新 • • 發佈:2019-02-08
已知表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
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函式
看到有個網友回帖用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