Sql计数关联频率

时间:2014-11-18 21:55:19

标签: sql postgresql count psql

给定一个2列表,其中第一列中始终至少出现2次值,并且该列中的每个不同值都与第二列中的不同值匹配。
所以喜欢:

    X | AA
    X | BB
    Z | CC
    Z | BB
    Z | AA
    W | AA
    W | BB
    W | CC

如何获得第二列中值对的关联频率或计数?
所以拿第一张桌子,你最终得到的结果是:

    AA,BB | 3
    AA,CC | 2
    CC,BB | 2

其中第二列是第一列对的出现次数
哦,顺序无关紧要,但应该只发生一次

    AA,BB = BB,AA

1 个答案:

答案 0 :(得分:1)

您可以使用自联接生成所有组合的列表:

select t.col1, t.col2, t.col2 || ',' || t2.col2
from table t join
     table t2
     on t.col1 = t2.col1 and t.col2 < t2.col2;

然后你可以计算它们:

select pairs, count(*)
from (select t.col1, t.col2, t.col2 || ',' || t2.col2 as pairs
      from table t join
           table t2
           on t.col1 = t2.col1 and t.col2 < t2.col2
     ) p
group by pairs;