2017-05-08 98 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

對於大多數文章,你可以使用'having'與'最大(計數(版))' –

+0

我無法理解你的建議,如果在代碼結束時,我只需添加'HAVING MAX(COUNT (版))',它給了我以下錯誤:組函數嵌套太深。 –

+0

作爲ArtCountAtconfEd'的分析函數,例如'select ...,count(*)over(由CODAuthor,CodArticle,Conference,Edition進行分區)將爲您提供每個會議版本作者的文章計數。從它你可以最大的會議/版本。 – xQbert

回答

0

該解決方案如何?

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

我認爲它只返回一個記錄(作者誰提出了大多數文章),而不是每個版本的作者,但也許我錯了 –