有效计算两个物品一起订购的次数的方法

时间:2013-06-11 04:13:14

标签: sql

我目前遇到的问题是,我必须编写一个SQL查询来计算一对项目一起订购的次数。

我可以随意使用的表格如下:

ORDER_ID | PRODUCT_ID |    QUANTITY    
1               1             10
1               2             20
1               3             10
2               1             10
2               2             20
3               3             50
4               2             10

我希望编写一个SQL查询,对于每个唯一的项目对,可以计算它们一起订购的次数,并告诉我它们处于相同顺序时的数量。

结果表应如下所示:

   PRODUCT_ID_1 | PRODUCT_ID_2 | NUM_JOINT_ORDERS | SUM_QUANTITY_1 | SUM_QUANTITY__2    
    1               2             2                   20                 40 
    1               3             1                   10                 10
    2               3             1                   20                 10

要利用的一些事情是:

  1. 有些订单只包含1个项目,因此与计算成对关系无关(不确定如何排除这些,但可能首先过滤它们是有意义的)
  2. 我们只需要在决赛桌中列出成对关系一次(因此可能是WHERE PRODUCT_ID_1< PRODUCT_ID_2)
  3. 有一篇类似的帖子here,虽然我已将该问题重新发布,因为

    1. 我真的很想知道最快的方法,因为我的原始表很庞大,而且我的计算资源有限,
    2. 在这种情况下,我只有一个表,没有列出数字的表。

1 个答案:

答案 0 :(得分:2)

您可以使用以下方法,它会显示上面显示的结果。

select
  PRODUCT1, PRODUCT2, count(*), sum(QUANTITY1), sum(QUANTITY2)
from (
  select
    T1.PRODUCT_ID AS PRODUCT1, 
    T2.PRODUCT_ID AS PRODUCT2, 
    T1.QUANTITY AS QUANTITY1, 
    T2.QUANTITY AS QUANTITY2
  from TABLE as T1, TABLE as T2
  where T1.ORDER_ID=T2.ORDER_ID
  and T1.PRODUCT_ID<T2.PRODUCT_ID
)
group by PRODUCT1, PRODUCT2