greatest函数与least函数怎么在oracle中使用

54次阅读
没有评论

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2356字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)