mysql - 顶级协作者 MySQL

标签 mysql sql

我有一个数据集,其中列出了与书籍相关的所有作者,如下所示

| 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/

相关文章:

java - 统计特定列sql中出现的特定值的数量

java - JPA 持久多对多错误 未选择数据库

mysql - phpmyadmin 在两个已插入的数据之间插入数据?

java - Mysql查询插入时截断数据

php - 将两个数组元素一一插入数据库表

sql - 什么操作类型在 SQL Server 2008 中调用了触发器?

mysql - 如果表中存在行,则在 SQL 中使用另一个表值

sql - 恢复数据库SQL Server查询

sql - 使用 NodeJS 和 MSSQL 包错误运行存储过程

mysql - 如何使用SQL在MySQL中设置auto_increment起始值?