1045. 买下所有产品的客户

1045. 买下所有产品的客户

题目

Customer 表:

±------------±--------+
| Column Name | Type |
±------------±--------+
| customer_id | int |
| product_key | int |
±------------±--------+
该表可能包含重复的行。
customer_id 不为 NULL。
product_key 是 Product 表的外键(reference 列)。

Product 表:

±------------±--------+
| Column Name | Type |
±------------±--------+
| product_key | int |
±------------±--------+
product_key 是这张表的主键(具有唯一值的列)。

编写解决方案,报告 Customer 表中购买了 Product 表中所有产品的客户的 id。

返回结果表 无顺序要求 。

返回结果格式如下所示。

示例 1:

输入:
Customer 表:
±------------±------------+
| customer_id | product_key |
±------------±------------+
| 1 | 5 |
| 2 | 6 |
| 3 | 5 |
| 3 | 6 |
| 1 | 6 |
±------------±------------+
Product 表:
±------------+
| product_key |
±------------+
| 5 |
| 6 |
±------------+
输出:
±------------+
| customer_id |
±------------+
| 1 |
| 3 |
±------------+
解释:
购买了所有产品(5 和 6)的客户的 id 是 1 和 3 。

分析

产品表有所有的产品id,客户表有多条消费记录,但是分组之后不能遍历产品id,可以利用去重之后的数量,如果数量和产品表数量相同,代表他买了所有的产品

题解

# 步骤一:筛选所有产品id
-- select count(distinct product_key) from product

# 步骤二:按客户id分组,筛选客户购买的所有产品
-- select customer_id,count(*) from customer group by customer_id
-- having count(distinct product_key) # 这个count()用于和产品表的总数对比,这里可以暂时不用

# 步骤三:用=连接两个sql,客户买的所有产品数量等于产品表的所有产品数量,就代表用户买了所有的产品,因为是去重的,所以可以直接对比数量
select customer_id from customer group by customer_id
having count(distinct product_key) = (
    select count(distinct product_key) from product
)

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值