2017-05-08 2 views
2

연습 문제는 다음과 같습니다. 10 개 이상의 회의가있는 회의를 고려할 때 회의의 각 버전에 해당 버전의 기사 및 해당 기사에서 가장 많이 기사를 제출 한 작성자의 코드가 표시됩니다 . 내 테이블은 다음과 같습니다 각 그룹에 대한 최대 값

Author(CodAuthor, Name, Surname); 
Article(CodArticle, Title); 
Authors_Article(CodAuthor, CodArticle); 
Conference_Editions(Conference, Edition, EditionName); 
Author_presents_Article(CodAuthor, Date, Room, CodArticle, Conference, Edition); 

는 다음 코드 작성 :

SELECT Apa.CodAuthor, Ec.EdizionName 
FROM Conference_Editions Ec JOIN Author_presents_Article Apa ON (Ec.Edition = Apa.Edition) AND (Ec.Conference = Apa.Conference) 
WHERE (Apa.Conference In (SELECT Conference 
          FROM Conference_Editions 
          GROUP BY Conference 
          HAVING COUNT(Edition)>10)) 
GROUP BY Apa.Conference, Apa.Edition, Apa.CodAuthor, Ec.EdizionName; 

을하지만 각 버전에 대한 대부분의 기사를 소개 저자를 찾는 방법을 모르겠어요.

+0

대부분의 기사를, 당신은' –

+0

나는 당신의 제안을 이해할 수없는 최대 (수 (판))'와'having'을 사용할 수 있습니다 (판))', 그것은 나에게 다음과 같은 오류를 낳는다 : 그룹 기능이 너무 깊게 중첩되어있다. –

+0

ArtCountAtconfEd로 'select ..., count (*) over (Part by CODAuthor, CodArticle, Conference, Edition) 파티션과 같은 분석 함수를 사용하면 각 컨퍼런스 에디션의 작성자 별 기사 수를 알 수 있습니다. 그것으로부터 당신은 conference/edition에 의해 최대가 될 수 있습니다. – xQbert

답변

0

이 솔루션은 어떻게됩니까? 코드의 끝에서 난 그냥 MAX (COUNT를 갖는`추가하면

SELECT Apa.CodAuthor, Ec.EdizionName 
FROM Conference_Editions Ec JOIN Author_presents_Article Apa ON (Ec.Edition = Apa.Edition) AND (Ec.Conference = Apa.Conference) 
WHERE (Apa.Conference In (SELECT Conference 
          FROM Conference_Editions 
          GROUP BY Conference 
          HAVING COUNT(Edition)>=10)) 
GROUP BY Apa.Conference, Apa.Edition, Apa.CodAuthor, Ec.EdizionName 
HAVING COUNT(*)=(SELECT MAX(Counter) 
       FROM (SELECT Conference, Edition, AuthorCode, COUNT(*) AS Counter 
         FROM Author_presents_Article 
         GROUP BY Conference, Edition, AuthorCode) AS Counting 
       WHERE Apa.Conference=Counting.Conference AND Apa.Edition=Counting.Edition); 
+0

내가 생각하기에 그것은 각 에디션에 대한 저자가 아닌 단 하나의 레코드 (일반적으로 가장 많은 기사를 발표 한 저자)를 반환하지만 어쩌면 내가 틀렸다고 생각한다. –

관련 문제