我有两列表: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中的所有可能组合,但是很快就会变得太昂贵了。
答案 0 :(得分:2)
您可以使用JOIN
和GROUP 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