给定一个两列表,其中第一列中的值总是至少出现两次,并且该列中的每个不同值都与第二列中的不同值匹配。
比如说:

    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

最佳答案

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

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;

09-10 02:44
查看更多