题目需求
从订单明细表(order_detail)中查询出所有购买过商品1和商品2,但是没有购买过商品3的用户。
期望结果如下:
user_id |
---|
103 |
105 |
需要用到的表:
订单信息表:order_info
order_id (订单id) | user_id (用户id) | create_date (下单日期) | total_amount (订单金额) |
---|---|---|---|
1 | 101 | 2021-09-30 | 29000.00 |
10 | 103 | 2020-10-02 | 28000.00 |
订单明细表:order_detail
order_detail_id(订单明细id) | order_id(订单id) | sku_id(商品id) | create_date(下单日期) | price(商品单价) | sku_num(商品件数) |
---|---|---|---|---|---|
1 | 1 | 1 | 2021-09-30 | 2000.00 | 2 |
2 | 1 | 3 | 2021-09-30 | 5000.00 | 5 |
22 | 10 | 4 | 2020-10-02 | 6000.00 | 1 |
… | … | … | … | … | … |
实现一
-- 2) 筛选出 购买过商品1和商品2、但是没有购买过商品3的用户
select user_id
from (
-- 1) 统计用户购买的所有商品
select t1.user_id as user_id,
collect_set(t2.sku_id) as sku_ids
from order_info as t1
left join order_detail as t2
on t1.order_id = t2.order_id
group by t1.user_id
) t3
where array_contains(sku_ids, '1')
and array_contains(sku_ids, '2')
and not array_contains(sku_ids, '3')
题目来源
http://practice.atguigu.cn/#/question/18/desc?qType=SQL