如何在 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?