당신은 당신이 찾고있는 무엇을 얻기 위해 자기 JOIN
을 시도 할 수 있습니다 : (이것은 ANSI을 같이) 당신이 (가) SUM
의대 num
의의 MAX
만지고있다
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)
;
이 보장 것 당신이 필요로하는 것에 대한 결과를 되 찾는 것. 제공된 정보로 인해이 두 필드에 대해서만 JOIN
이 적용된다는 것을 명심하십시오. JOIN
의 고유 ID가 있거나 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
;
일부의 DBMS가 여러 집계 기능을 할 수 있도록,이가 일할 수 :
는 사용중인 DBMS 내용에 따라, 두 가지 방법 중 하나를 단순화 할 수있다. 당신이 경우 일을 처리하기 위해 더 많은 매개 변수를해야 할 수도 있지만,
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
로 결과 집합을 제한 할 것이다 : 당신의 DBMS는 OLAP 기능을 수행 할 수 있습니다 경우
, 당신은 이런 식으로 뭔가를 할 수 당신은 year
이 포함되기를 바랐다. (당신은 GROUP
이다.
희망이 도움이됩니다.
아니요, 올바른 대답이 아닙니다. 대부분의 데이터베이스에서는'having' 절에 구문 오류가 반환됩니다. –
고쳐 주셔서 고마워요. – Signer3
JOIN으로 전환하십시오. RA에서 더 의미가 있으며 "아하!"가 될 것입니다. 한 번 본. – user2864740