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;
posted @ 2021-06-27 21:11  luckie  阅读(46)  评论(0)    收藏  举报