【发布时间】:2019-02-04 06:35:21
【问题描述】:
我正在处理一个问题,但我一直在生成决策表。
假设您有一张人们购买习惯的表格,我试图生成的是一起购买的产品对的独特组合,请考虑这个玩具示例来说明问题。
+--------+------+---------+ |买家 |交易序列 |产品 | +--------+------+---------+ | 1 | 1 |牛奶| | 1 | 1 |黄油| 高分辨率照片| CLIPARTO | 1 | 2 |牛奶| | 2 | 1 |黄油| 高分辨率照片| CLIPARTO | 2 | 2 |牛奶| | 3 | 1 |黄油| 高分辨率照片| CLIPARTO | 3 | 2 |勺子| 高分辨率照片| CLIPARTO +--------+------+---------+您有买家 ID、该特定买家的交易顺序以及他购买的产品。所以第一行告诉我们买家 1 在他的第一笔交易中购买了牛奶和黄油,在他的第二笔交易中再次购买了牛奶。
因此,对于买方 1,可能的产品组合总数为-
1. 牛奶 (tr1) & 牛奶 (tr2) 2. 黄油 (tr1) & 牛奶 (tr2)因此,您可以将其视为所有可能组合的笛卡尔连接。
同样,对于买家 2,唯一可能的组合是(黄油和牛奶)
对于买家 3,它是(黄油和勺子)。
归根结底,我想计算这种独特组合的数量。在这种情况下,它将是,
+---------------+--------+ |组合 |计数 | +---------------+--------+ |牛奶;牛奶| 1 | |黄油;牛奶| 2 | |黄油;勺子| 高分辨率照片| CLIPARTO 1 | +---------------+--------+请记住,我们需要确保订单不变,因此(黄油+牛奶)与(牛奶+黄油)不同,因为交易顺序很重要,因此应将它们单独计算为单独的组。
如果给我上表,我该如何在 MySQL 中执行此操作?有任何想法吗?
【问题讨论】:
-
since transaction order matters...如果确实如此,那么您绝对需要添加某种时间戳列,以跟踪实际购买的时间。 -
感谢您的评论。但这就是交易ID告诉你的。我只关心特定买家的交易,我不在乎买家 A 的第一笔交易是否在买家 B 的第一笔交易之前。如果这让事情变得清楚。这是因为我将所有第一笔交易视为一个整体,无论它们是在何时进行的。如果你在这里清楚,请告诉我
-
我们为什么要喝牛奶;牛奶代替牛奶?没有人买过两次牛奶。
-
我查询了但是结果和你不一样,我用了group_concat()
-
检查第 1 行和第 3 行 --> 买家 1 在他的第一次交易中购买了牛奶,然后在他的第二次交易中再次购买了牛奶。因此
milk; milk。如果您看到决赛桌,它是记录人们购买习惯的总结。目标是回答这样的问题 - 如果有人在第一次购买时购买牛奶,那么他在第二次购买时最有可能购买什么?这有意义吗??