我正在处理问题,并且无法生成决策表。
假设您得到一张人们的购买习惯表,我想生成的是一起购买的产品对的唯一组合,请考虑这个玩具示例来说明问题。
+-------+-----------------+---------+ | 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 | +---------------+-------+
请记住,我们需要确保顺序不变,因此(黄油+牛奶)与(牛奶+黄油)是不同的,因为交易顺序很重要,因此应将它们单独计为单独的组。< / p>
如果获得上表,如何在MySQL中执行此操作?有任何想法吗?
答案 0 :(得分:1)
我认为您只想加入自我。
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;
我认为不需要将产品串联到一个列中。
您的问题在一些细节上含糊不清: