本文主要是介绍【高频SQL基础题进阶版】1607.没有卖出的卖家,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文末总结了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
这篇关于【高频SQL基础题进阶版】1607.没有卖出的卖家的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!