1083.case when语句





方法一:case when语句
select buyer_id from ( select buyer_id, case product_name when 'S8' then 0 else 1 end as r from Sales a left join Product b on a.product_id=b.product_id where product_name in ('S8','iPhone') ) c group by c.buyer_id having sum(r)=0;
解题思维:
第一步:将Sales表和Product表进行联合;
第二步:筛选出product_name是'S8'和'iPhone'的行。我这么做的目的是使自己不要被无关的东西干扰,思维更加清晰。
第三步:根据题目是要选择只购买了S8,没有购买iPhone的买家。比如买家1买了S8(个数不限),买家2买了S8(个数不限)和iPhone(个数不限),买家3买了iPhone(个数不限),怎么才能只选出买家1呢?这里需要用到数学思维,买家买S8,记为0,买iPhone记为1,那么无论买几个S8合计都为0,只要买iPhone合计就大于0。
方法二:case when语句+sum
select buyer_id from ( select buyer_id, case p.product_name when 'S8' then 1 else 0 end S8, case p.product_name when 'iPhone' then 1 else 0 end iPhone from Sales s left join Product p on s.product_id=p.product_id ) a group by buyer_id having sum(S8)>0 and sum(iPhone)=0;

浙公网安备 33010602011771号