【Hive】比较多个列并返回最大或最小值(greatest&least)

0、前言

在工作开发中遇到取两列值中最大的值,当时首先想到的是max函数,因为在java中经常有类似的比较两个数值大小的情况,后来意识到max是取一列中的最大值,查询其他资料得知需要用到greatest函数,特意把greatest函数和least函数的简单用法总结下。

一、greatest函数

  • 基本用法:greatest(col_a, col_b, …, col_n):比较n个column的大小返回最大值;
  • 注意:
    • 若column中有null,返回null;
    • 若某个column中字段类型是string,而其他column字段类型是int/double/float,返回null;
  • 简单示例:
select greatest(-1, 0, 5, 8) --8
select greatest(-1, 0, 5, 8, null) --null
select greatest(-1, 0, 5, 8, "dfsf") --null
select greatest("2020-02-26","2020-02-23","2020-02-22") --2020-02-26
select greatest("2020-02-26 20:02:11","2020-02-23 20:02:11","2020-02-22 20:02:11") --2020-02-26 20:02:11

二、least函数

  • 基本用法:least(col_a, col_b, …, col_n)比较n个column的大小返回最小值;
  • 注意:
    • 若column中有null,返回null;
    • 若某个column中字段类型是string,而其他column字段类型是int/double/float,返回null;
  • 简单示例:
select least(-1, 0, 5, 8) --  -1
select least(-1, 0, 5, 8, null) --null
select least(-1, 0, 5, 8, "dfsf") --null
select least("2020-02-26","2020-02-23","2020-02-22") --2020-02-22
select least("2020-02-26 20:02:11","2020-02-23 20:02:11","2020-02-22 20:02:11") --2020-02-22 20:02:11

三、实战

需求:有两个字段,第一个字段是creat_time,第二个字段是update_time,现在的需求是如果两列字段有一个为空则取另一列字段的值,如果两列的值均不为空,则取较大的值;

case 
when creat_time is null and update_time is not null  then update_time
when creat_time is not null and update_time is  null  then creat_time
when creat_time is not null and update_time is not  null then greatest(creat_time,update_time)
else null 
end new_time


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值