返回介绍

solution / 1500-1599 / 1581.Customer Who Visited but Did Not Make Any Transactions / README

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

1581. 进店却未进行过交易的顾客

English Version

题目描述

表:Visits

+-------------+---------+
| Column Name | Type  |
+-------------+---------+
| visit_id  | int   |
| customer_id | int   |
+-------------+---------+
visit_id 是该表中具有唯一值的列。
该表包含有关光临过购物中心的顾客的信息。

 

表:Transactions

+----------------+---------+
| Column Name  | Type  |
+----------------+---------+
| transaction_id | int   |
| visit_id     | int   |
| amount     | int   |
+----------------+---------+
transaction_id 是该表中具有唯一值的列。
此表包含 visit_id 期间进行的交易的信息。

 

有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个解决方案,来查找这些顾客的 ID ,以及他们只光顾不交易的次数。

返回以 任何顺序 排序的结果表。

返回结果格式如下例所示。

 

示例 1:

输入:
Visits
+----------+-------------+
| visit_id | customer_id |
+----------+-------------+
| 1    | 23      |
| 2    | 9       |
| 4    | 30      |
| 5    | 54      |
| 6    | 96      |
| 7    | 54      |
| 8    | 54      |
+----------+-------------+
Transactions
+----------------+----------+--------+
| transaction_id | visit_id | amount |
+----------------+----------+--------+
| 2        | 5    | 310  |
| 3        | 5    | 300  |
| 9        | 5    | 200  |
| 12       | 1    | 910  |
| 13       | 2    | 970  |
+----------------+----------+--------+
输出:
+-------------+----------------+
| customer_id | count_no_trans |
+-------------+----------------+
| 54      | 2        |
| 30      | 1        |
| 96      | 1        |
+-------------+----------------+
解释:
ID = 23 的顾客曾经逛过一次购物中心,并在 ID = 12 的访问期间进行了一笔交易。
ID = 9 的顾客曾经逛过一次购物中心,并在 ID = 13 的访问期间进行了一笔交易。
ID = 30 的顾客曾经去过购物中心,并且没有进行任何交易。
ID = 54 的顾客三度造访了购物中心。在 2 次访问中,他们没有进行任何交易,在 1 次访问中,他们进行了 3 次交易。
ID = 96 的顾客曾经去过购物中心,并且没有进行任何交易。
如我们所见,ID 为 30 和 96 的顾客一次没有进行任何交易就去了购物中心。顾客 54 也两次访问了购物中心并且没有进行任何交易。

解法

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

我们可以使用子查询,先找出所有没有进行交易的 visit_id,然后按照 customer_id 进行分组,统计每个顾客的没有进行交易的次数。

# Write your MySQL query statement below
SELECT customer_id, COUNT(1) AS count_no_trans
FROM Visits
WHERE visit_id NOT IN (SELECT visit_id FROM Transactions)
GROUP BY 1;

方法二:左连接 + 分组统计

我们也可以使用左连接,将 Visits 表和 Transactions 表按照 visit_id 进行连接,然后筛选出 amountNULL 的记录,按照 customer_id 进行分组,统计每个顾客的没有进行交易的次数。

# Write your MySQL query statement below
SELECT customer_id, COUNT(1) AS count_no_trans
FROM
  Visits
  LEFT JOIN Transactions USING (visit_id)
WHERE amount IS NULL
GROUP BY 1;

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

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

发布评论

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