我有一个数据集,其中列出了与书籍相关的所有作者,如下所示
| Book ID | Author |
|---------|--------|
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | A |
| 2 | X |
| 3 | P |
| 3 | C |
| 4 | Q |
| 4 | B |
我想找出哪个作者是顶级合作者,意味着与不同的作者合作。就像上面的例子
A曾与B、C、X合作过
B -> A, C, Q
C -> A, B, P
P -> C
X -> A
Q -> B
我尝试了几种组连接组合,但没有得到想要的结果
最佳答案
一种方法是使用自连接来获取协作者。然后你可以使用 count(distinct)
来计算它们:
select ba.author, count(distinct ba2.author) as num_collaborators,
group_concat(distinct ba2.author0 as collaborators
from book_authors ba join
book_authors ba2
on ba.book_id = ba2.book_id and ba.author <> ba2.author
group by ba.author
order by num_collaborators desc;
关于mysql - 顶级协作者 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41957925/