if語法:IF(expr1,expr2,expr3)
其中,expr1是判斷條件,expr2和expr3分別是符合expr1和不符合expr1的返回結果。
如我們想把銷售量大于100的產品記為熱銷,其他記為不熱銷,
SELECT b.brand,
IF(b.sale > 100 , '熱銷', '不熱銷') AS hot_or_not
FROM db_data_jiadian.t_brand_sale AS b
結果:
這樣只能處理兩種情況,要處理多種情況用case...when。
SELECT b.brand AS '品牌',
CASE
WHEN b.sale = 0 THEN '未售出'
WHEN b.sale < 100 THEN '非爆款'
ELSE '爆款'
END AS '銷售情況'
FROM db_data_jiadian.t_brand_sale AS b
結果:
注意匹配時匹配到第一個符合的項就結束匹配,所以sale==0時會匹配未售出,而不會再匹配非爆款。
再來一個曾經面試時被問到過的行轉列/列轉行的問題。比如表結構是item_id, param_name, param_value,最后想變成每個item_id一行,取某些param_name值作為列名,則:
SELECT item_id,max(nengxiao),max(neijizaoyin),max(waijizaoyin),max(pishu),max(bianpin) from(
SELECT item_id,
CASE WHEN param_name ="能效等級" THEN param_value END AS 'nengxiao',
CASE WHEN param_name="內機噪音" THEN param_value END AS 'neijizaoyin' ,
CASE WHEN param_name ="外機噪音" THEN param_value END AS "waijizaoyin" ,
CASE WHEN param_name = "匹數" THEN param_value END AS "pishu" ,
CASE WHEN param_name = "定頻/變頻" THEN param_value END AS "bianpin"
FROM db_midea_data_jiadian.temp_item_param) a
GROUP BY item_id