2013-05-28 5 views
0

Oracle SQL Developer를 사용하고 있습니다. 우선이 테이블을 가지고 있습니다 :Oracle SQL 쿼리 문제

Name   Null  Type   
-------------- -------- ------------ 
EMPLOYEE_ID NOT NULL NUMBER(6)  
FIRST_NAME    VARCHAR2(20) 
LAST_NAME  NOT NULL VARCHAR2(25) 
DEPARTMENT_ID   NUMBER(4)  

대부분의 직원이있는 부서의 ID를 검색 (선택)하고 싶습니다. 그것은 나에게 같은 것을 제공

select count(employee_id), department_id 
from employees 
group by department_id; 

: 내가하고 싶은 무엇

count(employee_id) |  department_id 
---------------------|------------------ 
     6      100 
    16      30 
     1      12 

department_id를 검색 할 만하다 나는 모든 부서의 직원의 모든 숫자를 검색 할 성명을 통해 관리 30 (이 경우) 직원이 가장 많습니다.

답변

1

오라클에서이 작업을 수행하는 일반적인 방법은 :

select department_id 
from (select count(employee_id), department_id 
     from employees 
     group by department_id 
     order by count(employee_id) desc 
    ) t 
where rownum = 1; 

잠재적 중복을 가지고 모든 부서 ID를 원하는 경우, 다음은 최대로 가입하거나 분석 함수는 더 나은 방법입니다. 예 :

select department_id 
from (select count(employee_id), department_id, 
      rank() over (order by count(employee_id) desc) as seqnum 
     from employees 
     group by department_id 
    ) t 
where seqnum = 1; 
+0

감사합니다. 첫 번째 스 니펫은 완벽하게 작동하지만 두 번째 스 니펫은 둘 이상의 결과를 제공합니다. – Teo

+0

@ 테오. . . . 'desc'는 그 문제를 해결할 것입니다 (여러분의 코멘트를 읽기 전에 실제로 수정했습니다). –