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 多個條件划定時間范圍。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM