が起こっている理由を任意のアイデアは、あなたはまだ時に結果の行を取得する加入1として、何らかの理由で、私は人々を持っていない部署で、それは従業員の数を示します外部表の一致が見つかりません。すべての従業員列の値のみがNULLです。
レコードをカウントするのではなく、一致するレコード、つまり従業員が見つかってそのデータがnullでないレコードを数えたいとします。したがって、従業員表の列をカウントします(列または式を数えるときは、NULLはカウントされません)。例えば。 COUNT(e.department_id)
またはCOUNT(e.id)
を使用します。
SELECT d.name, COUNT(e.id) AS employees_number
FROM department d
LEFT JOIN employees e ON e.department_id = d.id
GROUP BY d.id, d.name;
私も好む何を、参加する前にカウント/集約することです。クエリは、もう少し複雑に見えますが、将来のクエリの変更でエラーが発生しにくいです。
SELECT d.name, COALESCE(e.how_many, 0) AS employees_number
FROM department d
LEFT JOIN
(
SELECT department_id, COUNT(*) AS how_many
FROM employees
GROUP BY department_id
) e ON e.department_id = d.id;
それはあなたがしたいだけ1つの集約列だとして、あなたはSELECT
句にサブクエリを移動するので、単純なクエリを取得することができます:
SELECT
d.name,
(
SELECT COUNT(*)
FROM employees e
WHERE e.department_id = d.id
) AS employees_number
FROM department d;
。それを 'INNER JOIN'に変更しようとするとどうなるのかを確認してください – xbb
このオプションは私に実際に人がいる部門だけを表示しますが、すべての部門を表示したい人はいません。 ? – Doro
これは無効な標準SQLです。どのDBMSを使用していますか? –