2015-10-14 80 views
-1

我想找到写入数量最多的书籍的前10名作者。MYSQL - 使用SUM

我有两个表,如下所示:

作者表:

author_name 
publisher_key 

出版表:

publisher_id 
publisher_key 
title 
year 
pageno 

要查找的结果,我尝试使用下面的查询:

SELECT a.author_name, SUM(p.pageno) 
FROM author a JOIN publication p ON a.publisher_key = p.publisher_key 
GROUP BY a.author_name 
LIMIT 10; 

我不知道为什么,当我运行此查询它需要年龄虽然记录的数量只有200

+0

如此,你为什么查询花费这么长的问题? “创作”和“出版”表有多少条记录? –

+0

表名是'author'还是'author''?您使用它们两个 – dstudeba

+0

我在发布中有200条记录,而对于创作的表,只有20条记录。它似乎正在陷入无限循环。我的问题是,我似乎无法得到上述查询的结果。 – windboy

回答

0

如果ydoow提示可能是锁定问题,请尝试使用NOLOCK运行您的选择以确认。

SELECT a.author_name, count(*) 
    FROM author a WITH (nolock) 
     INNER JOIN publication p WITH (nolock) ON a.publisher_key = p.publisher_key 
    GROUP BY a.author_name 
    ORDER BY 2 desc 
    LIMIT 10; 

你可以在这里得到更多的信息: Any way to select without causing locking in MySQL?

1

尝试

SELECT a.author_name, count(*) 
    FROM author a 
     INNER JOIN publication p ON a.publisher_key = p.publisher_key 
    GROUP BY a.author_name 
    ORDER BY 2 desc 
    LIMIT 10; 

你想知道是谁写的最多数量的书籍,所以您需要根据作者统计注册管理机构的数量。

order by 2 desc将命令您的查询从较大的数字到较小的2意味着选择列表中的第二个字段。

+0

嗨,我试过了SQL查询,但它仍然进入无限循环。我只是好奇这是什么做“GROUP BY 2 desc”? – windboy

+0

@windboy这是一个错字,我已经纠正它。 'ORDER BY 2 desc'还有一个解释 –

+0

对不起,谢谢。 – windboy