繁体   English   中英

按交易顺序合并购买

[英]Combining purchases by transaction sequence

我正在解决一个问题,但我一直在生成决策表。

假设您有一张人们购买习惯的表格,我试图生成的是一起购买的产品对的独特组合,请考虑这个玩具示例来说明问题。

+-------+-----------------+---------+
| buyer | transaction seq | product |
+-------+-----------------+---------+
| 1     | 1               | milk    |
| 1     | 1               | butter  |
| 1     | 2               | milk    |
| 2     | 1               | butter  |
| 2     | 2               | milk    |
| 3     | 1               | butter  |
| 3     | 2               | spoon   |
+-------+-----------------+---------+

您有买家 ID、该特定买家的交易顺序以及他购买的产品。 所以第一行告诉我们买家 1 在他的第一笔交易中购买了牛奶和黄油,并在他的第二笔交易中再次购买了牛奶。

因此,对于买方 1,所有可能的产品组合是——

1. milk (tr1) & milk (tr2)
2. butter (tr1) & milk (tr2)

因此,您可以将其视为所有可能组合的笛卡尔连接。

同样,对于买家 2,唯一可能的组合是(黄油和牛奶)

对于买家 3,它是(黄油和勺子)。

归根结底,我想计算这种独特组合的数量。 在这种情况下,它将是,

+---------------+-------+
| combination   | count |
+---------------+-------+
| milk; milk    | 1     |
| butter; milk  | 2     |
| butter; spoon | 1     |
+---------------+-------+

请记住,我们需要确保订单未更改,因此(黄油 + 牛奶)与(牛奶 + 黄油)不同,因为交易订单很重要,因此它们应作为单独的组单独计算。

如果给我上表,我如何在 MySQL 中执行此操作? 有任何想法吗?

我想你只是想要一个自我加入。

select p.product as first_product,
       p2.product as second_product,
       count(distinct p.buyer) as num_buyers,
       count(*) as num_purchases
from purchases p join
     purchases p2
     on p2.buyer = p.buyer and
        p2.seq > p.seq
group by p.product, p2.product
order by num_buyers desc;

我认为不需要将产品连接到单个列中。

您的问题在一些细节上含糊不清:

  • 您是在计算买家还是购买量?
  • “下一次”购买是否必须在下一次交易或任何后续交易中进行?
  • 可以多次购买同一产品吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM