共計 2356 個字符,預計需要花費 6 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章給大家介紹 greatest 函數與 least 函數怎么在 oracle 中使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
greatest (max(one),max(two),max(three))
求多列的最大值,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
least 的用法相同
語法介紹:
1 語法
GREATEST(expr_1, expr_2, …expr_n)
2 說明
GREATEST(expr_1, expr_2, …expr_n) 函數從表達式(列、常量、計算值)expr_1,
expr_2, … expr_n 等中找出最大的數返回。在比較時,OracIe 會自動按表達式的數據類型進行比較,以 expr_1 的數據類型為準。
3
允許使用的位置
過程性語句和 SQL 語句。
4 示例
4.1 示例一【數值】
expr_1 為數值型。按大小進行比較。
全部為數值型,取出最大值為 16:
SQL SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;
----------
16
部分為數值型,但是字符串可以根據 expr_1 的數據類型通過隱式類型轉換轉成數值型:
SQL SELECT GREATEST(2, 5 , 12, 3, 16, 8, 9) A FROM DUAL;
----------
16
部分為數值型,但是字符串不能通過隱式類型轉換成數值型會報錯,因為字符串 A 不能轉換成數值型:
SQL SELECT GREATEST(2, A , 12, 3, 16, 8, 9) A FROM DUAL;
SELECTGREATEST(2, A , 12, 3, 16, 8, 9) A FROM DUAL
ORA-01722:
無效數字
4.2 示例二【字符串】
expr_1 為字符型。按首字母進行比較(如果相等則向下比較)
全部為字符型,取出最大值 G:
SQL
SELECT GREATEST(A , B , C , D , E , F , G) A FROM DUAL;
G
全部為字符型,首字母相等:
SQL
SELECT GREATEST(A , B , C , D , E , GA , GAB) A FROM DUAL;
GAB
部分為字符型,會把非字符型轉換成字符型:
SQL
SELECT GREATEST(A , 6, 7, 5000, E , F , G) A FROM DUAL;
G
4.3 示例三【時間】
expr_1 為時間類型。
全部為時間類型:
SQL
SELECTGREATEST(sysdate,TO_DATE( 2014-08-01 , YYYY-MM-DD)) A FROM DUAL;
-----------
2014/8/1
部分為時間類型,不能進行隱式類型轉換:
SQL
SELECT GREATEST(sysdate, 2014-08-01) A FROMDUAL;
SELECTGREATEST(sysdate, 2014-08-01) A FROM DUAL
ORA-01861: 文字與格式字符串不匹配
4.4 示例四【空值】
使用 GREATEST 取最大值的時候,當 expr 為函數的時候,不可避免的會產生空值。產生空值,函數 GREATEST 會怎么進行處理那:
expr_1 為 NULL 時:
SQL
SELECT GREATEST(NULL, B , C , D , E , GA , GAB) A FROM DUAL;
-
expr_1 不為 NULL 時,其它的 expr 為 NULL 時:
SQL
SELECT GREATEST(A , B , C , D , E ,NULL, GAB) A FROM DUAL;
-
關于 greatest 函數與 least 函數怎么在 oracle 中使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
向 AI 問一下細節