SQL:如何在一个表中连接字段记录来创建新表?

时间:2014-09-21 03:57:08

标签: mysql sql

我目前正在学习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等操作。有人可以帮忙提出一些建议吗?

2 个答案:

答案 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;