是否有查询选择哪些客户购买了特定产品以及这些客户购买了哪些其他产品?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有查询选择哪些客户购买了特定产品以及这些客户购买了哪些其他产品?相关的知识,希望对你有一定的参考价值。

我有2个表,一个表上有事务(ProductId | TransactionId | CustomerID),另一个表有产品描述(ProductId | ProductName)。

我尝试过使用INNER JOIN,但只设法选择购买该特定产品的客户。

答案

假设您有以下表格:

mysql> EXPLAIN transactions;
+---------------+------------+------+-----+---------+----------------+
| Field         | Type       | Null | Key | Default | Extra          |
+---------------+------------+------+-----+---------+----------------+
| Id            | bigint(20) | NO   | PRI | NULL    | auto_increment |
| ProductId     | bigint(20) | YES  |     | NULL    |                |
| TransactionId | bigint(20) | YES  |     | NULL    |                |
| CustomerId    | bigint(20) | YES  |     | NULL    |                |
+---------------+------------+------+-----+---------+----------------+

您首先阅读了您想要的产品和客户的行:

SELECT
    t.TransactionId
FROM
    transactions t
WHERE
    t.CustomerId = 4 AND
    t.ProductId = 9;

这将生成如下内容:

+---------------+
| TransactionId |
+---------------+
|             7 |
+---------------+

然后在同一个表上使用JOIN来获取具有该事务id的所有行(我在“items”中使用别名i)。

SELECT
    i.ProductId,
    i.TransactionId,
    i.CustomerId
FROM
    transactions t
JOIN
    transactions i ON t.TransactionId = i.TransactionId
WHERE
    t.CustomerId = 4 AND
    t.ProductId = 9;

你可能得到这样的结果:

+----+-----------+---------------+------------+
| Id | ProductId | TransactionId | CustomerId |
+----+-----------+---------------+------------+
|  1 |         3 |             7 |          4 |
|  2 |         4 |             7 |          4 |
|  3 |         9 |             7 |          4 |
+----+-----------+---------------+------------+

从那里你可以访问/加入products表来获取名称。

请记住,您的表结构不适合3NF。您可能想要创建这样的表:

transactions
    - Id
    - CustomerId
    - OrderDate
    - [...]

products
    - Id
    - Name

transactionItems
    - Id
    - TransactionId
    - ProductId
    - Amount (?)

以上是关于是否有查询选择哪些客户购买了特定产品以及这些客户购买了哪些其他产品?的主要内容,如果未能解决你的问题,请参考以下文章

哪些客户在一个订单中购买了最多的产品?

SQL查询以获取购买其他客户购买的产品的客户

用于查找重叠客户的 SQL 子查询

选择所有购买了 ID 为“CENTC”的客户已购买的所有产品的 CustomerNames

Pandas - 计算每个客户对每个特定产品的购买次数

Hive日常数据需求