• Hive基础(14):HIVE语法(7)DML(4)DQL(3)流程控制语句(一) IF


    语法 IF( expr1 , expr2 , expr3 )

    其中, expre1是判断条件,expr2和expr3是符合expr1的自定义的返 回结果。

    用处:当从数据库中查询出来的结果需要转换成中文或是其他自定义的格式的时候。

    expr1 的值为 TRUE,则返回值为 expr2
    expr1 的值为FALSE,则返回值为 expr3

    select *,if(book_name='java','已卖完','有货') as product_status from book where price =50

    也可以,通过多层嵌套的方式,达到多次判断。

    select
       *,
    (       
         select 
                 pt_d,
                 imei,
                 if(expr1,A,
                     if(expre2,B,
                         if(expr3,C,
                             ................
                               if(exprn,N,                                                               
                                            m).......)))) as p1      
    from table1

    例二

    假设通过一个 sql 聚合不同时间段的统计数据,就有可能用到 IF 函数,设定表为 stat,其中分区字段为 dt 表示日期,字段 act 分别表示 1 为曝光行为,2 为点击行为,示例如下:

    SELECT
       item_id AS item_id,
       COUNT(IF(act = 1 AND dt >= 20200929 AND dt <= 20201001, 1, NULL)) AS impression_3,
       COUNT(IF(act = 2 AND dt >= 20200929 AND dt <= 20201001, 1, NULL)) AS click_3,
       IF(COUNT(IF(act = 1 AND dt >= 20200929 AND dt <= 20201001, 1, NULL)) > 0, round(COUNT(IF(act = 2 AND dt >= 20200929 AND dt <= 20201001, 1, NULL)) / COUNT(IF(act = 1 AND dt >= 20200929 AND dt <= 20201001, 1, NULL)), 4), 0) AS ctr_3,
       COUNT(IF(act = 1, 1, NULL)) AS impression_30,
       COUNT(IF(act = 2, 1, NULL)) AS click_30,
       IF(COUNT(IF(act = 1, 1, NULL)) > 0, round(COUNT(IF(act = 2, 1, NULL)) / COUNT(IF(act = 1, 1, NULL)), 4), 0) AS ctr_30,
    FROM stat
    WHERE dt >= 20200902
       AND dt <= 20201001 
    GROUP BY item_id

    如上 SQL 可以看出,一个 SQL 一次性地获取最近 3 天和 30 天的曝光(impression)、点击(click)和点击率(ctr)数据,利用 IF 多个条件划定时间范围。

  • 相关阅读:
    k8s 重要概念
    k8s 核心功能
    5 秒创建 k8s 集群
    学习 Kubernetes 的 Why 和 How
    Yeelink初步体验
    为Qemu aarch32添加BeautifulSoup4模块
    实现Qemu aarch32虚拟开发板ping www.baidu.com
    利用/proc/pid/pagemap将虚拟地址转换为物理地址
    加快Qemu Aarch32虚拟开发板的启动速度
    为Qemu aarch32开发板添加sd卡
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14413813.html
Copyright © 2020-2023  润新知