在另外两列中查找第三对的和

时间:2019-05-01 12:57:26

标签: mysql combinations

我有两列表:ID SCORE。 ID和SCORE都不是唯一的。因此,(风格化)示例:

ID | SCORE
----------
 1 | 5
 1 | 6
 2 | 9
 2 | 5
 2 | 6
 3 | 5
 3 | 7
----------

我需要获得一个单独的三列表,其中有:

SCORE1 | SCORE2 | FREQUENCY
---------------------------
   5   |   6    |    2
   5   |   7    |    1
   5   |   9    |    1
   6   |   7    |    0
   6   |   9    |    0
   7   |   9    |    0
---------------------------

我需要找到具有成对的SCORE(SCORE1和SCORE2)的ID数量(FREQUENCY)。对的顺序无关紧要。因此(5,6)和(6,5)是相同的。在我的示例中,由于ID(1)和ID 2都包含一对(5,6),所以它的频率为2。两个ID(5,9)都不存在,因此频率为0,等等。 >

使用SQL从第一个表中获取第二个表的最佳方法是什么?

我需要SQL命令,因为我拥有的数据量很大。我尝试过使用一小部分数据来循环遍历R中的所有可能组合,但是很快就会变得太昂贵了。

1 个答案:

答案 0 :(得分:2)

您可以使用JOINGROUP BY使用以下解决方案:

SELECT t1.SCORE, t2.SCORE, SUM(t1.ID = t2.ID)
FROM test t1 JOIN test t2
WHERE t1.SCORE <> t2.SCORE AND t1.SCORE < t2.SCORE
GROUP BY t1.SCORE, t2.SCORE
ORDER BY t1.SCORE, t2.SCORE

demo on dbfiddle.uk