2017-05-08 8 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)のような分析関数は、各カンファレンスエディションの著者による記事の数を与えるでしょう。それからあなたは会議/編集版で最大限になることができます。 – xQbert

答えて

0

このソリューションについてはどうなりますか?コードの最後に、私はちょうどMAX(COUNTをHAVING `追加する場合

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

私はそれが各版の作者ではなく、たぶん私が間違っている(それは最も一般的な記事を発表した作者) –

関連する問題