Oracle中取多個字段多個列最大值最小值的方法

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

 

求多列的最大值,oracle中的greatest 函數

已知表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
發佈了91 篇原創文章 · 獲贊 44 · 訪問量 57萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章