mysql - 按交易顺序组合购买
问题描述
我正在解决一个问题,我陷入了生成决策表的困境。
假设您有一张人们的购买习惯表,我试图生成的是一起购买的产品对的独特组合,考虑这个玩具示例来说明问题。
+--------+------+---------+ | 买家 | 交易序列 | 产品 | +--------+------+---------+ | 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 中做到这一点?有任何想法吗?
解决方案
我想你只是想要一个自我加入。
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;
我认为不需要将产品连接到单个列中。
您的问题在一些细节上含糊不清:
- 您是在计算买家还是购买量?
- “下一次”购买是否必须在下一次交易或任何后续交易中进行?
- 同一产品可以多次购买吗?
推荐阅读
- python - 安装 django-heroku 时遇到问题
- php - Laravel 网站多个主页。用户可以更改
- c# - HttpClient SendASync 崩溃
- mysql - 如何将重复值分组到单独的组中?
- xslt - 如何使用 XSLT 版本 1 对附近的相同元素进行分组
- gnuplot - Gnuplot RGB-alpha 线型和大 int 问题
- c# - SignalR 不调用调用方方法 - iOS 设备
- postgresql - 如何声明一个变量作为函数的结果?
- kubernetes - 入口配置原因所有后端服务都处于不健康状态
- javascript - 检测悬空承诺的静态/动态方法