2013-09-04 4 views
1

У меня есть таблица MySQL, как показано ниже.MySQL - выберите максимальную сумму

**AuthorID**, **PublicationName**, ReferenceCount, CitationCount 

В качестве первичного ключа действует идентификатор AuthorID и PublicationName. Мне нужно найти максимальную сумму ReferenceCount и CitationCount для всех авторов. Например, данные приведены ниже.

1 AAA 2 5 
1 BBB 1 3 
1 CCC 2 4 
2 AAA 1 4 

В этом случае, мне нужен результат, как,

1 AAA 7 
2 AAA 5 

Я попытался ниже запрос.

SELECT AuthorID, PublicationName, Max(Sum(ReferenceCount + CitationCount)) 
from Author 
Group by AuthorID, PublicationName 

Если я использую макс (сумма (ReferenceCount + CitationCount)) группу по AuthorID, PublicationName я получаю сообщение об ошибке, как "недопустимое использование функции Group". Я считаю, что я должен включить Имея предложение в моем запросе. Но я не уверен, как сделать то же самое.

+0

По внешнему виду вашего вывода, это просто выглядит как сумма для меня и упорядочивает эту сумму. – christopher

+0

Соглашение об именах MySQL запрещает имена и имена таблиц и полей CamelCase, вместо этого подчеркивание должно использоваться для разделения слов (например, author_id и publ_name). – Jeffrey

ответ

2

Если я правильно понял вопрос, вы хотите, чтобы все записи для публикации имели наибольшее число ссылок. Публикация и их подсчет цитирования определяется по формуле:

SELECT PublicationName, Sum(ReferenceCount + CitationCount) 
from Author 
Group by PublicationName 
order by Sum(ReferenceCount + CitationCount) desc 
limit 1; 

order by и limit 1 дать вам самое высокое значение.

Если вы хотите, чтобы все записи для публикации с максимальной суммой:

select a.* 
from Author a join 
    (SELECT PublicationName, Sum(ReferenceCount + CitationCount) 
     from Author 
     Group by PublicationName 
     order by Sum(ReferenceCount + CitationCount) desc 
     limit 1 
    ) asum 
    on a.PublicationName = asum.PublicationName 
+0

Спасибо за ваш быстрый ответ. У меня на столе 6434 строки. Если я запускаю отдельный запрос AuthorID, я получаю 389 строк. Однако, если я использую запрос, как вы предложили, я получаю вывод только для одного идентификатора автора. – Ramesh

+0

@Ramesh. , , Обычно это происходит, когда вы оставляете предложение 'group by'. Однако я изменил ответ, потому что, по-моему, я изначально неправильно понял его. –

+0

Я все еще вижу вывод только для одной строки. Я не уверен, почему он дает результат только для одного идентификатора автора, поскольку у меня есть 389 разных идентификаторов автора в моей таблице. – Ramesh

0

Попробуйте это:

SELECT AuthorID, PublicationName, Max(ReferenceCount+CitationCount) 
FROM Author 
GROUP BY AuthorID 

Проблема с запросом в том, что SUM() суммирует значение столбца для много строк. Он не может использоваться для суммирования столбцов так, как вы хотели. Для этого просто используйте плюс (+), как правило.