2015-10-14 2 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

Так ваш вопрос о том, почему запрос так долго? Сколько записей имеют таблицы 'authored' и' publiance'? –

+0

Является ли имя таблицы 'author' или' authored'? Вы используете их как – dstudeba

+0

У меня есть 200 записей в публикации, а для авторской таблицы всего 20 записей. Кажется, он идет в бесконечный цикл. Мой вопрос в том, что я не могу получить результат из вышеуказанного запроса. – windboy

ответ

0

Если вы указали, что это может быть проблема с блокировкой, попробуйте выполнить выбор с помощью 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