力扣1083(MySQL)-销售分析Ⅱ(简单)

发布时间 2023-04-10 10:11:46作者: 我不想一直当菜鸟

题目:

编写一个 SQL 查询,查询购买了 S8 手机却没有购买 iPhone 的买家。注意这里 S8 和 iPhone 是 Product 表中的产品。

查询结果格式如下图表示:

Product table:

Sales table:

 Result table:

 id 为 1 的买家购买了一部 S8,但是却没有购买 iPhone,而 id 为 3 的买家却同时购买了这 2 部手机。

解题思路:

方法一:sum()

  • 先将两个表通过 product_id 进行联结;
  • 再以buyer_id进行分组,筛选出购买 S8 且没有购买 iPhone 的买家。
1 select buyer_id
2 from (
3    select product_name,b.product_id,buyer_id
4    from product_1083 a 
5    right join sales_1083 b
6    on a.product_id = b.product_id
7 ) as temp
8 group by temp.buyer_id
9 having sum(temp.product_name = 'S8') >= 1 and sum(temp.product_name = 'iPhone') = 0;

 方法二:

  • 先找出购买了 iPhone 的 buyer_id
  • 然后再筛选出购买了S8但是buyer_id没在第一步查询出的结果里的数据。
1 SELECT
2     buyer_id 
3 FROM
4     product_1083 
5     JOIN sales_1083  USING ( product_id ) 
6 WHERE
7     product_name = 'S8' 
8     AND buyer_id NOT IN ( SELECT buyer_id FROM product_1083  JOIN sales_1083 USING ( product_id ) WHERE a.product_name = 'iPhone' )