共计 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 问一下细节