题目:
编写一个 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' )