返回介绍

solution / 1000-1099 / 1045.Customers Who Bought All Products / README

发布于 2024-06-17 01:03:31 字数 1933 浏览 0 评论 0 收藏 0

1045. 买下所有产品的客户

English Version

题目描述

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 。

解法

方法一:分组统计 + 子查询

我们将 Customer 表按照 customer_id 进行分组,然后使用 HAVING 子句筛选出购买了所有产品的客户。

# Write your MySQL query statement below
SELECT customer_id
FROM Customer
GROUP BY 1
HAVING COUNT(DISTINCT product_key) = (SELECT COUNT(1) FROM Product);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文