【问题标题】:Combining purchases by transaction sequence按交易顺序组合购买
【发布时间】: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。如果您看到决赛桌,它是记录人们购买习惯的总结。目标是回答这样的问题 - 如果有人在第一次购买时购买牛奶,那么他在第二次购买时最有可能购买什么?这有意义吗??

标签: mysql sql


【解决方案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;

我认为没有必要将产品连接到单个列中。

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

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

【讨论】:

  • 谢谢,这正是我要找的 :) 我正在计算购买量,但也很高兴让买家也计算在内。是的,可以多次购买相同的产品,但我们可以将它们视为一个(这意味着如果有人购买两种黄油,我不感兴趣,我只是简单地接受它,因为黄油是在交易 1 中购买的)。
猜你喜欢
  • 2021-10-29
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2011-09-30
  • 2016-07-02
  • 1970-01-01
相关资源
最近更新 更多