分享

oracle内置取最大最小函数:greatest和least

 Frank__Library 2015-06-09

oracle中取最大值最小值一般想到的就是组函数max和min,这也是我的第一想法,但是别忘了,max和min是用来取某个字段的最大最小值,并不是说如果你有几个数,然后你直接从它们中取出最大或者最小,由于我不知道greatest和least这两个函数,最后我实现的是通过case去比较的,如果A大于B就取A,否则取B,现在就可以直接用greatest(A, B)来实现了。

1、coalescue

返回表达式列表中第一个非空的值,列表必须都是相同类型,也可以是一个表的同一行、不同列的值进行比较。

1
2
3
4
5
6
7
8
9
10
11
SELECT coalesce(1,
                NULL,
                2)
  FROM dual; -- 返回1
SELECT coalesce(NULL,
                2,
                1)
  FROM dual; -- 返回2
SELECT coalesce(t.empno,
                t.mgr)
  FROM scott.emp t; -- 效果类似 NVL( t.empno, t.mgr )

2、greatest

返回表达式列表中最大值,列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。当列表中有一个值为null,那么就返回null,这个地方需要注意,如果需要当值为null的时候,可以考虑用nvl转为0来进行比较。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT greatest(1,
                3,
                2)
  FROM dual; -- 返回3
SELECT greatest('A',
                'B',
                'C')
  FROM dual; -- 返回C
SELECT greatest(NULL,
                'B',
                'C')
  FROM dual; -- 返回null
SELECT greatest(t.empno,
                t.mgr)
  FROM scott.emp t; -- 返回empno和mgr 较大值

3、least

返回表达式列表中最小值,列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。当列表中有一个值为null,那么就返回null,这个地方需要注意,如果需要当值为null的时候,可以考虑用nvl转为0来进行比较。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT least(1,
             3,
             2)
  FROM dual; -- 返回1
SELECT least('A',
             'B',
             'C')
  FROM dual; -- 返回A
SELECT least(NULL,
             'B',
             'C')
  FROM dual; -- 返回null
SELECT least(t.empno,
             t.mgr)
  FROM scott.emp t; -- 返回empno和mgr 较小值

对于max和min函数,如果处理的列中有null值,那么max和min会忽略null值,但是,如果在该列中,所有行的值都是null,那么max、min的返回值就是null。

PS:本文部分转自“李大龙”的《oracle内置函数之greatest和least》,只做学习、交流之用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多