Oviya Sivakumar Ответов: 1

Нужно найти, в каком отделе есть наименьшее количество сотрудников ? а отдел со 2-м наименьшим номером?


хотите отобразить то, в каком отделе есть наименьшее количество сотрудников ? а отдел со 2-м наименьшим номером?

есть три стола
1)отделы
*dept_no
*dept_name
2)dept_emp
*emp_no
*dept_no
3)сотрудники
*emp_no
*emp_name

как объединить эти таблицы и найти, в каком отделе меньше всего сотрудников ? а отдел со 2-м наименьшим номером?

Что я уже пробовал:

я попробовал следующий код

SELECT d.`dept_no`,
       d.`dept_name`,
  count  (dt.emp_no) as "Num of employees"
FROM departments d
  join dept_emp dt
  on d.dept_no=dt.dept_no
  having count(dt.emp_no)=
    (select min(count(de.emp_no))
    from departments d
    join dept_emp dt
    on d.dept_no=dt.dept_no
    group by d.dept_name)
group by d.dept_name;


но его показ ошибки что-то вроде
"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'group by d.dept_name' at line 13"

1 Ответов

Рейтинг:
11

OriginalGriff

Ну ... "де" не существует:

(select min(count(de.emp_no))

И группировка по потребностям должна предшествовать обладанию:
having count(dt.emp_no)=
...
group by d.dept_name;

Но почему все так сложно? Простое соединение сделает это:
SELECT TOP 2 d.DeptNo, d.DeptName, de.EmpPerDept
FROM Departments d
JOIN (
SELECT DeptNo, COUNT(EmpNo) AS EmpPerDept
FROM DeptEmp 
GROUP BY DeptNo) de
ON de.DeptNo = d.DeptNo
ORDER BY EmpPerDept ASC


Oviya Sivakumar

это работает спасибо

OriginalGriff

Всегда пожалуйста!