Вы могли бы хотеть попробовать самодиагностику JOIN
, чтобы получить то, что вы ищете:
SELECT Main.author
FROM Article AS Main
INNER JOIN (
SELECT year
,author
,SUM(num) AS sumnum
FROM Article
GROUP BY year
,author
) AS SumMain
ON SumMain.year = Main.year
AND SumMain.author = Main.author
GROUP BY Main.author
HAVING SUM(Main.num) = MAX(SumMain.sumnum)
;
Это будет гарантировать (как ANSI) вы получаете MAX
из SUM
Средних num
с и только возвращая результаты за то, что вам нужно. Имейте в виду, что я только JOIN
редактировал эти два поля из-за предоставленной информации ... если у вас есть уникальный идентификатор, вы можете указать JOIN
, или вам потребуется более конкретная информация, чтобы получить соответствие 1 к 1, соответствующим образом отрегулируйте.
В зависимости от того, что СУБД вы используете, она может быть упрощена один из двух способов:
SELECT author
FROM (
SELECT year
,author
,SUM(num) AS sumnum
FROM Article
GROUP BY year
,author
HAVING SUM(num) = MAX(sumnum)
) AS Main
;
Некоторые DBMSes позволяют сделать несколько агрегатных функций, и это может работать.
Если ваша СУБД позволяет выполнять функции OLAP, вы можете сделать что-то вроде этого:
SELECT author
FROM (
SELECT year
,author
,SUM(num) AS sumnum
FROM Article
GROUP BY year
,author
) AS Main
QUALIFY (
ROW_NUMBER() OVER (
PARTITION BY author
,year
ORDER BY sumnum DESC
) = 1
)
;
Какой бы ограничить результирующий набор только самого высокого sumnum
, хотя, возможно, потребуется больше параметров для обработки вещей, если вы хотели, чтобы участвовали year
(вы - GROUP
, и только по этой причине я поднимаю его).
Надеюсь, это поможет!
Нет, это неправильный ответ. В большинстве баз данных это вернет синтаксическую ошибку в предложении 'having'. –
фиксированный это, спасибо. – Signer3
Переключитесь на JOIN. Это имеет больше смысла в РА и будет «ах-ха!». один раз видно. – user2864740