【高频SQL基础题进阶版】1607.没有卖出的卖家

本文介绍了四种在SQL中查找2020年未进行销售的卖家的方法,包括子查询、表连接加限制、notexists和groupbywithhaving。这些技巧展示了如何利用SQL逻辑找出特定条件下不存在的数据。
摘要由CSDN通过智能技术生成

文末总结了4种,找不存在的思路。

错误答案:

这样不对:

另一个错误答案:

参考答案:

1、用了很普通的 子查询,not in

select s1.seller_name  from Seller s1

where s1.seller_id not in (

    select s.seller_id from Seller s left join Orders o  on s.seller_id  = o.seller_id where date_format(o.sale_date,'%Y') = '2020'

)

order by s1.seller_name

2、表连接条件加上限制,然后取null (也是可以找到不存在的情况)

select s.seller_name from Seller s left join Orders o

on s.seller_id  = o.seller_id and year(o.sale_date)= 2020 (表连接情况)

where o.seller_id is null order by s.seller_name

2.5 先构造满足条件的2020年的有销售出去的表,然后表连接order,然后取null。

和2有点类似,但是略微有点不同。感觉2.5这个思路,更适合复杂一点的变化

3、not exists

 select s.seller_name from Seller s

where not exists (select 1 from Orders o where s.seller_id = o.seller_id and year( o.sale_date)=2020 ) order by s.seller_name

4、group by

select t.seller_name from (

select s.seller_name, s.seller_id from Seller s left join Orders o

on s.seller_id  = o.seller_id

group by s.seller_name, s.seller_id

-- having  sum(date_format(o.sale_date,'%Y') = 2020) = 0 -- 这个不行呢

--  having sum(if(o.sale_date is null ,0,date_format(o.sale_date,'%Y') = '2020')) = 0 改成这样就可以了

 having  sum(if(year(o.sale_date)=2020,1,0)) = 0

order by s.seller_name

) t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值