case表达式

#####################
##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;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值