Запрос для отображения названия отдела, в котором максимальное количество сотрудников упорядочено по названию отдела

#sql #oracle

Вопрос:

 1 select Department.department_name, count(Staff.staff_id) as counter
2 from Department right join Staff on Department.department_id = Staff.department_id
3 group by department_name
4 order by department_name;
 

Приведенный выше код дает мне

     DEPARTMENT_NAME            COUNTER
------------------------------ ----------
CSE                             2
ECE                             1
EEE                             2
IT                              2
SE                              4
 

Но мне просто нужно показать отдел, который имеет максимальное значение, не показывая значение, подобное этому,

 DEPARTMENT_NAME
------------------------------
SE
 

Вот схема для справки.

Ответ №1:

В стандартном SQL вы бы использовали order by и ограничили одну строку:

 select s.department_name
from Department d join
     Staff s
     on d.department_id = s.department_id
group by d.department_name
order by count(*) desc
fetch first 1 row only;
 

Примечания:

  • Это работает в Oracle. В MySQL используйте limit 1 вместо этого.
  • Псевдонимы таблиц облегчают запись и чтение запроса.
  • Достаточно внутреннего соединения. Вам не нужны отделы без совпадений.

Редактировать:

В более старых, неподдерживаемых версиях Oracle вы можете использовать:

 select d.*
from (select s.department_name
      from Department d join
           Staff s
           on d.department_id = s.department_id
      group by d.department_name
      order by count(*) desc
     ) d
where rownum = 1;
 

Комментарии:

1. извлеките только первую 1 строку; не работает. Ошибка ORA 00933: неправильно завершена команда SQL.

2. @AbhishekMazumder . . . fetch доступен во всех поддерживаемых версиях Oracle. Какую версию вы используете?

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

4. @AbhishekMazumder — поэтому для вашего ora-00933 нам нужно будет увидеть ваше фактическое, полное и точное заявление. Вы не можете отлаживать код, который вы не видите, и никто другой не может.