#####################
##CASE表达式
#####################
#1.搜索case表达式
use xscj;
-- case when <求值表达式> then <表达式>
-- when <求值表达式> then <表达式>
-- when <求值表达式> then <表达式>
-- ...
-- else <表达式>
-- END
##case表达式从最初的when开始,如果为真执行then,为假就进行下一步
-- case最后返回
-- ||为字符串拼接
##这句没有达到预期效果 可能 ||在MySQL不支持
SELECT product_name,
CASE WHEN product_type = '衣服'
THEN 'A :' || product_type
WHEN product_type = '办公用品'
THEN 'B:' || product_type
WHEN product_type = '厨房用具'
THEN 'C :' || product_type
ELSE NULL
END AS abc_product_type
FROM Product;
SELECT product_name,
CASE WHEN product_type = '衣服'
THEN 'A'
WHEN product_type = '办公用品'
THEN 'B'
WHEN product_type = '厨房用具'
THEN 'C'
ELSE NULL
END AS abc_product_type
FROM Product;
when <求值表达式> then <表达式>
when <求值表达式> then <表达式>
...
ELSE <表达式>
end
###############1.和聚合函数一起使用
SELECT CASE WHEN year = 'FR' THEN 'FR'
ELSE 'Not FR' END AS year_group,
COUNT(1) AS count
FROM benn.college_football_players
GROUP BY CASE WHEN year = 'FR' THEN 'FR'
ELSE 'Not FR' END;
-- 上面一共两列两行,第一列为fr/not fr,第二列为他们的数目
-- GROUP BY 1 可以达到同样的效果
SELECT player_name,
year,
CASE WHEN year = 'SR' THEN 'yes'
ELSE 'no' END AS is_a_senior
FROM benn.college_football_players
-- 一共三列:其实case表达式是依赖选择的其他元素而调整的!!!!!!!!!!
###############2.进行 行列转换
select product_type,
sum(sale_price) as sum_price from product
group by product_type;
-- 下面行列转换
select sum(case when product_type = '衣服'
then sale_price else 0 end)as sum_price_clothes,
sum(case when product_type = '厨房用具'
then sale_price else 0 end)as sum_price_kitchen,
sum(case when product_type = '办公用品'
then sale_price else 0 end)as sum_price_office
from product;
##例子2:
SELECT CASE WHEN year = 'FR' THEN 'FR'
WHEN year = 'SO' THEN 'SO'
WHEN year = 'JR' THEN 'JR'
WHEN year = 'SR' THEN 'SR'
ELSE 'No Year Data' END AS year_group,
COUNT(1) AS count
FROM benn.college_football_players
GROUP BY 1
-- 行列转换
SELECT COUNT(CASE WHEN year = 'FR' THEN 1 ELSE NULL END) AS fr_count,
COUNT(CASE WHEN year = 'SO' THEN 1 ELSE NULL END) AS so_count,
COUNT(CASE WHEN year = 'JR' THEN 1 ELSE NULL END) AS jr_count,
COUNT(CASE WHEN year = 'SR' THEN 1 ELSE NULL END) AS sr_count
FROM benn.college_football_players
############.简单case表达式
-- case <表达式>
-- when <表达式> then <表达式>
-- when <表达式> then <表达式>
-- when <表达式> then <表达式>
-- ...
-- else <表达式>
-- END
SELECT product_name,
CASE WHEN product_type = '衣服'
THEN 'A'
WHEN product_type = '办公用品'
THEN 'B'
WHEN product_type = '厨房用具'
THEN 'C'
ELSE NULL
END AS abc_product_type
FROM Product;
#########对比
SELECT product_name,
CASE product_type
WHEN '衣服'
THEN 'A'
WHEN '办公用品'
THEN 'B'
WHEN '厨房用具'
THEN 'C'
ELSE NULL
END AS abc_product_type
FROM Product;