Я пытаюсь подсчитать сотрудников (из таблицы сотрудников) на подразделение (таблицу отделов). Мой подход заключался в следующем:
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
{Я только начал, и у меня не так много способов получить обратную связь во время самостоятельного обучения}
3 ответа
SELECT d.division, COUNT (e.first_name)
FROM departments d
JOIN employees e on d.id=e.department_id
GROUP BY d.division
Эта конструкция ИЗ отделов д, служащие представляет собой «перекрёстное соединение» между двумя таблицами
Если предложение отсутствует, поместите связь между отделом и сотрудником в предложение where.
Ваш запрос указывает
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
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.