度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1129|回复: 5
打印 上一主题 下一主题

[分享] oracle内置取最大最小函数:greatest和least

[复制链接]

348

主题

3572

帖子

9315

积分

论坛元老

Rank: 8Rank: 8

积分
9315
跳转到指定楼层
楼主
发表于 2020-6-10 20:18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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(t.empno,
  10.                 t.mgr)
  11.   FROM scott.emp t; -- 效果类似 NVL( t.empno, t.mgr )
复制代码

2、greatest

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

  1. SELECT greatest(1,
  2.                 3,
  3.                 2)
  4.   FROM dual; -- 返回3
  5. SELECT greatest('A',
  6.                 'B',
  7.                 'C')
  8.   FROM dual; -- 返回C
  9. SELECT greatest(NULL,
  10.                 'B',
  11.                 'C')
  12.   FROM dual; -- 返回null
  13. SELECT greatest(t.empno,
  14.                 t.mgr)
  15.   FROM scott.emp 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(t.empno,
  14.              t.mgr)
  15.   FROM scott.emp t; -- 返回empno和mgr 较小值
复制代码

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


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
沙发
发表于 2020-6-11 14:11:25 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
板凳
发表于 2020-6-11 14:11:45 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
地板
发表于 2020-6-11 14:12:08 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
5#
发表于 2020-2-15 22:41:25 | 只看该作者
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
6#
发表于 2020-5-1 17:59:53 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-16 04:59 , Processed in 0.140621 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表