if、case...when...then

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容