返回介绍

solution / 1300-1399 / 1398.Customers Who Bought Products A and B but Not C / README

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

1398. 购买了产品 A 和产品 B 却没有购买产品 C 的顾客

English Version

题目描述

 Customers 表:

+---------------------+---------+
| Column Name     | Type  |
+---------------------+---------+
| customer_id     | int   |
| customer_name     | varchar |
+---------------------+---------+
customer_id 是这张表中具有唯一值的列。
customer_name 是顾客的名称。

 

Orders 表:

+---------------+---------+
| Column Name   | Type  |
+---------------+---------+
| order_id    | int   |
| customer_id   | int   |
| product_name  | varchar |
+---------------+---------+
order_id 是这张表中具有唯一值的列。
customer_id 是购买了名为 "product_name" 产品顾客的id。

 

请你编写解决方案,报告购买了产品 "A""B" 但没有购买产品 "C" 的客户的 customer_id 和 customer_name,因为我们想推荐他们购买这样的产品。

返回按 customer_id 排序 的结果表。

返回结果格式如下所示。

 

示例 1:

输入:
Customers table:
+-------------+---------------+
| customer_id | customer_name |
+-------------+---------------+
| 1       | Daniel    |
| 2       | Diana     |
| 3       | Elizabeth   |
| 4       | Jhon      |
+-------------+---------------+

Orders table:
+------------+--------------+---------------+
| order_id   | customer_id  | product_name  |
+------------+--------------+---------------+
| 10     |   1    |   A     |
| 20     |   1    |   B     |
| 30     |   1    |   D     |
| 40     |   1    |   C     |
| 50     |   2    |   A     |
| 60     |   3    |   A     |
| 70     |   3    |   B     |
| 80     |   3    |   D     |
| 90     |   4    |   C     |
+------------+--------------+---------------+
输出:
+-------------+---------------+
| customer_id | customer_name |
+-------------+---------------+
| 3       | Elizabeth   |
+-------------+---------------+
解释:
只有 customer_id 为 3 的顾客购买了产品 A 和产品 B ,却没有购买产品 C 。

解法

方法一:LEFT JOIN + GROUP BY + HAVING

我们可以用 LEFT JOINCustomers 表和 Orders 表连接起来,然后按照 customer_id 进行分组,最后筛选出购买了产品 A 和产品 B 却没有购买产品 C 的顾客。

# Write your MySQL query statement below
SELECT customer_id, customer_name
FROM
  Customers
  LEFT JOIN Orders USING (customer_id)
GROUP BY 1
HAVING SUM(product_name = 'A') > 0 AND SUM(product_name = 'B') > 0 AND SUM(product_name = 'C') = 0
ORDER BY 1;

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

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

发布评论

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