2013-05-28 3 views
0

Я использую Oracle Developer разработчика oracle. Начнем с того, у меня есть эта таблица:Проблема SQL SQL-запроса

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

Я хотел бы получить (выбрать) идентификатор отдела, в котором большинство сотрудников. мне удалось через заявление, чтобы получить все числа сотрудников в каждом отделе:

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

Типичный способ сделать это в Oracle:

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; 

Если у вас есть потенциальные дубликаты и хотят, чтобы все универмаги идентификаторов, а затем присоединиться к максимальному или аналитической функцией является лучшим подходом. Например:

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

@ Theo. , , , 'Desc' исправит эту проблему (я действительно исправил ее до того, как прочитал ваш комментарий). –