LeetCode-1083/1084 销售分析 II/III(简单)

标题1083. 销售分析II

LeetCode-1083/1084 销售分析 II/III(简单)_第1张图片
LeetCode-1083/1084 销售分析 II/III(简单)_第2张图片
LeetCode-1083/1084 销售分析 II/III(简单)_第3张图片
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sales-analysis-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本人思路:
– 1、‘购买了 S8 手机却没有购买 iPhone 的买家’,主要是对这个条件的理解,可以使用分组后求和,即买了s8的话sum(p.product_name = ‘S8’)>=1,没买iphone的话sum(p.product_name = ‘iPhone’)=0

select s.buyer_id
from Sales as s inner join Product as p 
on s.product_id = p.product_id
group by s.buyer_id
having sum(p.product_name = 'S8')>=1 and sum(p.product_name = 'iPhone')=0

标题1084. 销售分析III

在这里插入图片描述
LeetCode-1083/1084 销售分析 II/III(简单)_第4张图片
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sales-analysis-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本人思路:

方法一
1、‘仅在2019-01-01至2019-03-31(含)之间出售的商品。’,即该商品只在这个时间区间出售了,不在其他时间出售过。受上一题思路影响,写的有点傻,附上简单写法~

select s.product_id as product_id, p.product_name
from Sales as s inner join Product as p 
on s.product_id = p.product_id
group by s.product_id ,p.product_name
having sum(s.sale_date >= '2019-01-01'and s.sale_date <= '2019-03-31')>0 and sum(s.sale_date <'2019-01-01'or s.sale_date >'2019-03-31') =0

-- 附上having简易写法
-- HAVING MIN(sale_date) >= '2019-01-01' AND MAX(sale_date) <= '2019-03-31'

方法二:
– 1、先找到product_id不在2019-01-01’ and '2019-03-31’时间内,再让原表的product_id不在该范围内

select product_id,product_name
from Product
where product_id not in (
    select product_id
    from Sales
    where sale_date not between '2019-01-01' and '2019-03-31'
);

你可能感兴趣的:(数据库刷题)