如何计算一对"标签"的次数?一起发生?
在这个例子中,我在表中有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
答案 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 |