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