2024年5月31日发(作者:)
oracle内置取最大最小函数:greatest和least
oracle中取最大值最小值一般想到的就是组函数max和min,这
也是我的第一想法,但是别忘了,max和min是用来取某个字段的最
大最小值,并不是说如果你有几个数,然后你直接从它们中取出最大
或者最小,由于我不知道greatest和least这两个函数,最后我实现
的是通过case去比较的,如果A大于B就取A,否则取B,现在就可
以直接用greatest(A, B)来实现了。
1、coalescue
返回表达式列表中第一个非空的值,列表必须都是相同类型,也
可以是一个表的同一行、不同列的值进行比较。
1 SELECT coalesce(1,
2 NULL,
3 2)
4 FROM dual; -- 返回1
5 SELECT coalesce(NULL,
6 2,
7 1)
8 FROM dual; -- 返回2
9 SELECT coalesce(,
10 )
11 FROM t; -- 效果类似 NVL( , )
2、greatest
返回表达式列表中最大值,列表必须是相同类型,也可以是一个
表的同一行、不同列的值进行比较。当列表中有一个值为null,那么
就返回null,这个地方需要注意,如果需要当值为null的时候,可以
考虑用nvl转为0来进行比较。
1 SELECT greatest(1,
2
3
4 FROM dual; -- 返回3
5 SELECT greatest('A',
6
7
8 FROM dual; -- 返回C
9 SELECT greatest(NULL,
10
3,
2)
'B',
'C')
'B',
11 'C')
12 FROM dual; -- 返回null
13 SELECT greatest(,
14 )
15 FROM t; -- 返回empno和mgr 较大值
3、least
返回表达式列表中最小值,列表必须是相同类型,也可以是一个
表的同一行、不同列的值进行比较。当列表中有一个值为null,那么
就返回null,这个地方需要注意,如果需要当值为null的时候,可以
考虑用nvl转为0来进行比较。
1 SELECT least(1,
2 3,
3 2)
4 FROM dual; -- 返回1
5 SELECT least('A',
6 'B',
7 'C')
8 FROM dual; -- 返回A
9 SELECT least(NULL,
10 'B',
11 'C')
12 FROM dual; -- 返回null
13 SELECT least(,
14 )
15 FROM t; -- 返回empno和mgr 较小值
对于max和min函数,如果处理的列中有null值,那么max和
min会忽略null值,但是,如果在该列中,所有行的值都是null,那
么max、min的返回值就是null。
PS:本文部分转自“李大龙”的《oracle内置函数之greatest和
least》,只做学习、交流之用。


发布评论