Я пытаюсь подсчитать сотрудников (из таблицы сотрудников) на подразделение (таблицу отделов). Мой подход заключался в следующем:

SELECT d.division, COUNT (first_name) 
FROM departments d, employees
GROUP BY d.division

Я получаю общее количество всех (1000) сотрудников, умноженное на количество одинаковых подразделений (с разными отделами), например. если в подразделении «Оборудование» есть отделы «Автомобилестроение» и «Инструменты», я получаю 2000.

Подсчет в одной таблице работает нормально (отделы находятся как в таблицах «сотрудники», так и в таблицах «отделы»)

SELECT department, COUNT (first_name) 
FROM employees
GROUP BY department

{Я только начал, и у меня не так много способов получить обратную связь во время самостоятельного обучения}

0
Yana 26 Янв 2022 в 14:32
Привет, Яна, поиск Advice в Stackoverflow, позвольте мне назвать это трудным путем :). Для вопросов по SQL вы всегда должны предоставить полный пример с некоторыми демо-данными. вы можете использовать sqlfiddle.com для этого. После этого вы должны точно описать, что вы ожидаете увидеть после выполнения запроса.
 – 
fisi-pjm
26 Янв 2022 в 14:48

3 ответа

SELECT d.division, COUNT (e.first_name) 
 FROM departments d 
 JOIN employees e on d.id=e.department_id
GROUP BY d.division

Эта конструкция ИЗ отделов д, служащие представляет собой «перекрёстное соединение» между двумя таблицами

0
Sergey 26 Янв 2022 в 14:44

Если предложение отсутствует, поместите связь между отделом и сотрудником в предложение where.

0
Naresh Sharma 26 Янв 2022 в 17:27

Ваш запрос указывает

FROM departments, employees

Но отсутствует предложение WHERE, поэтому нет ничего, что ограничивало бы только сотрудников в конкретном подразделении, учитываемых для каждого подразделения, вместо этого включая каждого сотрудника в каждом подразделении ( см. перекрестное соединение).

Используйте современный синтаксис соединения, указав, как должно быть выполнено соединение с помощью ключевого слова ON, выбрав соединение LEFT (т. е. внешнее), чтобы по-прежнему возвращались подразделения без сотрудников (со счетчиком из 0):

SELECT
    division,
    COUNT (first_name) as employee_count
FROM departments d 
LEFT JOIN employees e ON e.department_id = d.id
GROUP BY division
0
Bohemian 26 Янв 2022 в 17:33