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