今天寫sql語句,需要取出多個字段列中的最大值和最小值。
本來想到的做法比較麻煩,要分別取出max(one),max(two),max(three),放到pb中在編程處理。
後來找到個greatest 函數和least函數,只用寫greatest (max(one),max(two),max(three))就解決問題,least用法同,good。
求多列的最大值,oracle中的greatest 函數
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