[英]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.