Apriori算法 - 找到组合的2

时间:2011-04-25 18:55:19

标签: sql-server tsql

我有一个Order表,如下所示:

   ORDER_ID PRODUCT_ID
     1        1230
     1        1231
     1        1232
     2        1231
     2        2000
     3        1230
     3        3567

Product表:

  PRODUCT_ID NAME
   1230       A
   1231       B
   1232       C

我的第一个问题,如何获得2个产品表的组合,那么我的新表结构应该如何?

例如

;

{1230,1231}, {1230,1232}, {1231,1232} 

但我不想这个{1231,1230},因为它已经添加了。

第二个,在Order表中,我保持产品销售一个会话。我的新桌怎么样?

实例;

orderid     products
1          {1230,1231,1232}

最后,我想找到其他一起销售的产品支持价值, exp: {1231,1230} count : 2 {1230,1232 count : 0 }

提前感谢。

编辑:我想这样做:http://webdocs.cs.ualberta.ca/~zaiane/courses/cmput499/slides/Lect10/sld054.htm

2 个答案:

答案 0 :(得分:2)

如果我已正确解释您的要求?

;WITH T(P1, P2, ORDER_ID)
     AS (SELECT p1.PRODUCT_ID,
                p2.PRODUCT_ID,
                O.ORDER_ID
         FROM   Product p1
                JOIN Product p2
                  ON p1.PRODUCT_ID < p2.PRODUCT_ID
                JOIN [ORDER] o
                  ON o.PRODUCT_ID IN ( p1.PRODUCT_ID, p2.PRODUCT_ID )
         GROUP  BY p1.PRODUCT_ID,
                   p2.PRODUCT_ID,
                   O.ORDER_ID
         HAVING COUNT(*) = 2)
SELECT P1,
       P2,
       COUNT(*) AS Cnt
FROM   T
GROUP  BY P1,
          P2  

答案 1 :(得分:0)

我真的不明白问题2或3,所以请在你的问题中澄清。

第一个很棘手,但我认为你正在寻找这样的东西:

SELECT * FROM products p1, products p2 GROUP BY ((p1.PRODUCT_ID*p2.PRODUCT_ID)+p1.PRODUCT_ID+p2.PRODUCT_ID)

因为它只按行分组,只有两个数字相同,而不关心顺序。可能有一种更优雅的方式来创建基本上是该组合的唯一ID,但我想不出任何。