2017-12-27 41 views
1

나는이 세 가지 쿼리에 결과를 조작하려고 봤는데 내가 모든 대학 구성원 미만에 참여- 오라클

목록을하고 있어요 것으로 잘못 알고하지 않습니다 세 그룹. 그것은하지 않는 것 (첫 번째 부분)이 쿼리 그룹의 최대 수

를 선도하는 학술 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 

절은 당신에게 당신이 원하는 결과를 얻을 수있는 곳의 관련 부분의 주석.

오라클 SQL을 사용한 이후로 오랜 시간이 걸렸습니다. 따라서 작은 구문 오류 (특히, 오라클이 테이블 이름 뒤에 AS 키워드를 허용하는지 여부를 기억하지 못합니다)를 고려하십시오.

+1

약간의 조정으로 문제를 해결했습니다. 대단히 감사합니다 !! . – Rexyness