• 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 多个条件划定时间范围。

  • 相关阅读:
    690. 员工的重要性
    91. 解码方法
    153. 寻找旋转排序数组中的最小值
    81. 搜索旋转排序数组 II
    33. 搜索旋转排序数组
    80. 删除有序数组中的重复项 II
    5708. 统计一个数组中好对子的数目
    高精度除法
    易闻app
    2021.4.13
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14413813.html
Copyright © 2020-2023  润新知