SQL:如何对每个组执行此查询

时间:2015-12-04 06:21:30

标签: sql sqlite

我正在使用SQLite3,我有以下设置。我有一个表格,其组织如下:

ID   k  count
1    a     1 
1    b     2
1    c     5
2    a     3
2    b     4
3    a     2

我想要做的是计算每个ID共享k的计数列之间的元素明智的产品和。

因此,例如,在1和2之间,元素明智的总和为SUM (1*3 + 2*4),因为它们共享ab键。同样,在2到3之间,它将是SUM(3*2),因为它们只共享“a”键。

这是因为我必须为每个ID对创建它,即(1, 2), (2, 3), (1, 3),我不知道如何在SQL中执行此操作。

2 个答案:

答案 0 :(得分:1)

您可以使用INNER JOIN查找所有匹配对:

SELECT t1.ID AS t1ID, t2.ID AS t2ID, 
       SUM(t1.count*t2.count) AS s
FROM mytable AS t1
INNER JOIN mytable AS t2 
  ON t1.ID < t2.ID AND t1.k = t2.k
GROUP BY t1.ID, t2.ID 

使用GROUP BY t1.ID, t2.ID,我们可以轻松计算每对的元素和。

Demo here

答案 1 :(得分:0)

@Luca而不是Generating as pairs((1,2),(2,3),(1,3)),你可以生成as(1,2,3 ...)。你可以使用子查询inorder找到合适的条件并产生所需的输出。