2017-12-27 29 views
1

私はこれらの3件の問い合わせに結果を操作しようとしてきたと私はすべての学術メンバーが未満に参加- オラクル

一覧をやっていることを間違っているのか分かりません3つのグループ。

(最初の部分のための)一覧学術IDをこのクエリでグループ

の最大数をリードする

SELECT a.ID , min(a.name) as Name 
FROM Academic a , researchGroup r 
WHERE count(r.managerID)>3 
GROUP BY a.ID; 

動作するようには思えません。

私はこのリレーショナル・スキーマ

researchGroup(name (P.R Key Composite) , codeD , mainResearchArea , managerID /* forgien key with AcademicStaff(ID) */ , labID (P.R Key Composite)) 

AcademicStaff(ID {PR KEY} , name) 

任意のソリューションがありますか?

答えて

1

以下は、あなたの学者のリストを与えると、多数の研究グループの管理:

SELECT 
    * 

FROM 
    (
     SELECT 
      ac.ID     AS academic_id 
      ,MAX(ac.name)   AS academic_name 
      ,COUNT(rg.managerID) AS num_groups_managed 
      ,DENSE_RANK() OVER (ORDER BY COUNT(rg.managerID) DESC) AS academic_rank 

     FROM 
      Academic AS ac 

     INNER JOIN 
      researchGroup AS rg 
      ON (rg.managerID = ac.ID) 

     GROUP BY 
      ac.ID 

    ) AS subquery 

WHERE 
    --** uncomment the following line for the academics managing above 3 groups 
    --num_groups_managed >= 3 

    --** or uncomment the following line for the top-ranked academics (there could be more than 1) 
    --academic_rank = 1 

ORDER BY 
    academic_rank ASC 
    ,academic_name ASC 

をWHERE句の関連部分は、あなたが望む結果が得られますアンコメント。

Oracle SQLを使用して以来、しばらくの間、小さな構文エラー(特に、テーブル名の後ろにASというキーワードを受け入れるかどうか覚えていない)を言い訳します。

+1

これはいくつかの調整で問題をほぼ解決しました。ありがとうございます! 。 – Rexyness