2023.11.16 hivesql之条件函数,case when then,查找不为null数据

目录

一.Conditional Functions条件函数

二.空值相关函数 

三:使用注意事项

3.1 then后面不能接子查询

3.2 then后面只能是结果值

3.3 then后面能不能接两列

四.用于建表新增字段使用场景


一.Conditional Functions条件函数

-- 演示条件函数
-- if(条件判断,true的时候执行此处,false的时候执行此处)
select if(10 > 5, '真', '假'); --如果为true,执行前面的.如果为false,执行后面的
select if(10 < 5, '真', '假');

--条件转换函数格式1: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END

演示:

select
       case 7 --拿着7这个结果,依次在下面各个对比
           when 1 then '周一上班'
           when 2 then '周二上班'
           when 3 then '周三上班'
           when 4 then '周四上班'
           when 5 then '周五上班'
           when 6 then '周六休息'
           when 7 then '周日休息'
           else '老弟啊,你是外星人吗?'
       end;

-- 条件转换函数格式2:CASE  WHEN a==b THEN a==c [WHEN a==d THEN a==e]* [ELSE f] END
select
       case
           when 7==1 then '周一上班'
           when 7==2 then '周二上班'
           when 7==3 then '周三上班'
           when 7==4 then '周四上班'
           when 7==5 then '周五上班'
           when 7==6 then '周六休息'
           when 7==7 then '周日休息'
           else '老弟啊,你是外星人吗?'
       end;

二.空值相关函数 

-- 演示null相关函数
-- isnull(数据) 为空: true 不为空:false
select isnull(null); -- true

-- isnotnull(数据) 不为空: true 为空:false
select isnotnull('斌子'); -- true

-- nvl(数据,前面的数据是null的时候执行此处): 如果数据不为空打印数据,为空打印第二个参数
select nvl('binzi','666');
select nvl(null,'666');

-- coalesce(v1,v2...): 从左到右依次查找,返回第一个不是null的值,如果找到最后都是null,就返回null
-- 常用于判断某些字段是否是null的
select COALESCE(null,11,22,33);-- 11
select COALESCE(null,null,22,33);--22
select COALESCE(null,null,null,33);--33
select COALESCE(null,null,null,0);--0
select COALESCE(null,null,null,null);--null

三:使用注意事项

3.1 then后面不能接子查询

 then的后面不能接查询语句。

3.2 then后面只能是结果值

then的后面只能接具体的值,不能接逻辑表达式

3.3 then后面能不能接两列

then的后面不能接两列的值,如果想要接两列的值,就必须写两遍case when then逻辑。

四.用于建表新增字段使用场景

现有一张订单表,其中有支付类型,支付方式,订单状态,这三个字段是使用0,1,2,3数字来定义状态的

 在加载完文件后,表的几个字段内容如下

在原表中,用0,1,2,3这样的数字来确认状态,不方便查看,因此我们可以使用case条件判断,

when 数字=0,1,2 ,then内容显示对应的中文状态,来方便我们查看

create table dw1_orders as
select
    orderid,
    orderno,
    shopid,
    userid,
    orderStatus,  --这里如果不写原来的字段名,那么新增的中文列就替代原来的这列
    case
        when orderStatus = -3 then '用户拒收'
        when orderStatus = -2 then '未付款的订单'
        when orderStatus = -1 then '用户取消'
        when orderStatus = 0 then '待发货'
        when orderStatus = 1 then '配送中'
        when orderStatus = 2 then '用户确认收货'
    end as  orderStatus_cn,  -- 相当于新增了一列
    goodsmoney,
    delivermoney,
    totalmoney,
    realtotalmoney,
    payType,
        case
        when payType = 0 then '未知'
        when payType = 1 then '支付宝'
        when payType = 2 then '微信'
        when payType = 3 then '现金'
        when payType = 4 then '其他'
    end  as paytype_cn
    ,
    isPay,
    case
        when isPay = 0 then '未知'
        when isPay = 1 then '支付宝'
        when isPay = 2 then '微信'
        when isPay = 3 then '现金'
        when isPay = 4 then '其他'
    end as isPay_cn,
    username,
    useraddress,
    userphone,
    createtime,
    paytime,
    totalpayfee
from orders;

创建的表效果如下,在原来的0,1,2旁边新增了一列对应的中文,方便了我们查看

也可以用overwrite操作来覆盖原来的表,但我们是新增了三列,所以列数和原表对不上,这里就当做新表了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白白的wj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值