如何在 T-SQL 语句中找到 Apriori 关联?

Posted

技术标签:

【中文标题】如何在 T-SQL 语句中找到 Apriori 关联?【英文标题】:How to find Apriori association in T-SQL statement? 【发布时间】:2011-05-04 12:26:23 【问题描述】:

数据库:

Transaction  ProductID
 1              1000
 2              1000
 2              1001 
 3              1000
 3              1002
 4              1000
 4              1001
 5              1003

在上表中,如何用 T-SQL 语句找到这个结果?

+-------------+-----------+-----------------+
| PRODUCTID1  | PRODUCTID2|     SUPPORT     |
+-------------+-----------+-----------------+
|      1000   |   1001    |         2       |
+-------------+-----------+-----------------+
|      1000   |   1002    |         1       |
+-------------+-----------+-----------------+
|      1000   |   1003    |         0       |
+-------------+-----------+-----------------+
|      1001   |   1002    |         0       |
+-------------+-----------+-----------------+
|      1001   |   1003    |         0       |
+-------------+-----------+-----------------+
|      1002   |   1003    |         0       |,
+-------------+-----------+-----------------+

测试表:

create table transactions(
   ORDERID    INT,
   PRODUCTID INT
);

insert into transactions(ORDERID, PRODUCTID)
values ('1', '1000')
      ,('2', '1000')
      ,('2', '1001')
      ,('3', '1000')
      ,('3', '1002')
      ,('4', '1000')
      ,('4', '1001'),
       ('5', '1003');

提前致谢。

【问题讨论】:

@marc_s:Apriori 是 OP 想要使用的算法的名称:en.wikipedia.org/wiki/Apriori_algorithm 【参考方案1】:

你能推断出零点吗?即我们可以说没有列出的任何东西都是零吗?如果是这样:

select t1.PRODUCTID as [PRODUCTID1], t2.PRODUCTID as [PRODUCTID2],
       COUNT(1) as [SUPPORT]
from transactions t1 inner join transactions t2
  on t1.ORDERID = t2.ORDERID
  and t1.PRODUCTID < t2.PRODUCTID
group by t1.PRODUCTID, t2.PRODUCTID

有输出:

PRODUCTID1  PRODUCTID2  SUPPORT
----------- ----------- -----------
1000        1001        2
1000        1002        1

【讨论】:

我还想知道一件事。如何找到 3 的组合。根据您的结果(第一行); 1000,1001,1002 和 1000,1001,1003 @wide - 您可以尝试使用相同的模式进行第二次连接 - 但它开始变得混乱。真的,您需要提供具体的数据示例来检查结果(目前没有跨越 3 的交易) 是的,但是样本数据集喜欢我的大数据库结构。我的数据库包含 2,3,4 个一起销售的产品。我不知道该怎么做。我正在实现 Apriori 算法。

以上是关于如何在 T-SQL 语句中找到 Apriori 关联?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SELECT 或 UPDATE 语句中使用 T-SQL UDF?

如何将数据框转换为Apriori算法的数据框。

SqlCommandBuilder类是如何构建T-Sql语句

使用Apriori进行关联分析

Excel 等价于 T-SQL EXISTS

使用 T-SQL Merge 语句时如何避免插入重复记录