oracle中的greatest 函数和 least函数
发布时间:2020-12-12 13:39:28 所属栏目:百科 来源:网络整理
导读:oracle中的greatest 函数和 least函数 原文地址:https://blog.csdn.net/sinat_32023305/article/details/78778596 ? ? greatest (max(one),max(two),max(three)) ? ? 求多列的最大值,oracle中的 greatest 函数 已知表TB的数据如下 SQL select * from tb; ?
oracle中的greatest 函数和 least函数原文地址:https://blog.csdn.net/sinat_32023305/article/details/78778596? ?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,english) max, ?? 3 ?? ?? least(chinese,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_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; ??????? A ---------- ?????? 16 部分为数值型,但是字符串可以根据expr_1的数据类型通过隐式类型转换转成数值型: SQL>SELECT GREATEST(2,‘5‘,9) A FROM DUAL; ??????? A ---------- ?????? 16 部分为数值型,但是字符串不能通过隐式类型转换成数值型会报错,因为字符串A不能转换成数值型: SQL>SELECT GREATEST(2,‘A‘,9) A FROM DUAL; SELECTGREATEST(2,9) A FROM DUAL ? ORA-01722: 无效数字 ? 4.2??????????? 示例二【字符串】 expr_1为字符型。按首字母进行比较(如果相等则向下比较) 全部为字符型,取出最大值G: SQL> SELECT GREATEST(‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘) A FROM DUAL; A - G 全部为字符型,首字母相等: SQL> SELECT GREATEST(‘A‘,‘GA‘,‘GAB‘) A FROM DUAL; A --- GAB 部分为字符型,会把非字符型转换成字符型: SQL> SELECT GREATEST(‘A‘,6,7,5000,‘G‘) A FROM DUAL; A - G ? 4.3??????????? 示例三【时间】 expr_1为时间类型。 全部为时间类型: SQL> SELECTGREATEST(sysdate,TO_DATE(‘2014-08-01‘,‘YYYY-MM-DD‘)) A FROM DUAL; A ----------- 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,‘GAB‘) A FROM DUAL; A - ? expr_1不为NULL时,其它的expr为NULL时: SQL> SELECT GREATEST(‘A‘,NULL,‘GAB‘) A FROM DUAL; A - ? 由上可以发现,只要GREATEST的expr有一个为NULL,都会返回NULL。 ---------------------? 原文:https://blog.csdn.net/liangweiwei130/article/details/36384145 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |