我目前正在学习SQL查询,并提出如下问题
有一个为此创作的表有三个属性,
id author_id publication_id
找到前20位最具协作性的作者。也就是说,对于每个作者 确定其合作者数量,然后找到前20名。
我正在考虑使用此表来生成一个共同作者的临时表,即
author_id coauthor_id
1 2
1 3
1 7
2 1
2 8
2 10
然后计算每位作者的共同作者数量,然后找到最大值
由于只有一个表,因此无法使用JOIN等操作。有人可以帮忙提出一些建议吗?
答案 0 :(得分:2)
当只有一张桌子时,你绝对可以使用JOIN
。这是从数据库中获取数据的一种非常常见的方式。
示例:
mysql> CREATE TABLE Authored (id INT, author_id INT, publication_id INT);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO Authored
-> SELECT 1, 1, 1
-> UNION ALL
-> SELECT 2, 2, 1
-> UNION ALL
-> SELECT 3, 1, 2;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
现在我们有一个创作的表,我们希望将它加入到自身中,以便查看多个作者为同一出版物做出贡献的所有实例:
mysql> SELECT a1.publication_id, a1.author_id AS author1, a2.author_id AS author2
-> FROM Authored AS a1, Authored AS a2
-> WHERE a1.publication_id = a2.publication_id
-> AND a1.author_id != a2.author_id;
+----------------+---------+---------+
| publication_id | author1 | author2 |
+----------------+---------+---------+
| 1 | 2 | 1 |
| 1 | 1 | 2 |
+----------------+---------+---------+
2 rows in set (0.00 sec)
从这里开始,您将能够按作者分组,计算结果并对其进行排序。
答案 1 :(得分:0)
select count(coauthor_id) as nbr, author_id from co-authors
group by author_id
order by nbr
limit 20;