从数据库表中获取共同出现的计数

时间:2017-11-06 04:10:48

标签: sql postgresql

如何计算一对"标签"的次数?一起发生?

在这个例子中,我在表中有3个StackOverflow问题及其标签。我希望在同一个问题上得到标签一起存在的次数。

Question ID   Tag ID
--------------------------
1             1
1             2
1             3

2             1
2             2

3             1
3             4

期望的结果:

Tag 1     Tag 2    Count
---------------------------
1         2        2
1         3        1
1         4        1

2 个答案:

答案 0 :(得分:1)

您可以进行自我加入,然后分组。

select t1.tag_id as tag1, t2.tag_id as tag2, count(*) as occurrence
from yourtable as t1
join yourtable as t2
on t1.question_id = t2.question_id
t1.tagid < t2.tagid
group by tag1, tag2;

答案 1 :(得分:1)

以下工作,也避免了标签与自己共存。

select *, count(*) from (
   select a.tag tag1, b.tag tag2 from mytable a, mytable b 
   where a.question=b.question and a.tag < b.tag
 ) t group by tag1, tag2;

| tag1 | tag2 | count(*) |
|------|------|----------|
|    1 |    2 |        2 |
|    1 |    3 |        1 |
|    1 |    4 |        1 |
|    2 |    3 |        1 |