2011-04-25 51 views
0

的我有一个Order表是这样的:Apriori算法 - 查找2组合

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

+0

什么是“双组合”?例如。为什么包含“{1230,1232}”?你真的想要达到什么?这一点不是很清楚...... – 2011-04-25 18:58:04

+0

你只是试图找到所有已销售在一起的产品的组合,以及这种情况的发生频率如何? – 2011-04-25 19:03:05

+0

我想这样做:http://webdocs.cs.ualberta.ca/~zaiane/courses/cmput499/slides/Lect10/sld054.htm – user722591 2011-04-25 19:17:22

回答

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 
+0

我不明白你为什么把COUNT(*)= 2 – user722591 2011-04-25 19:21:41

+0

因为我们正在寻找有两种产品的订单。我假定每个“PRODUCT_ID”每个订单只能出现一次。如果不是这种情况,您可以使用COUNT(DISTINCT PRODUCT_ID)= 2'来代替。不知道这个答案与你发布的链接有多接近! – 2011-04-25 19:23:18

0

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

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

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

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