3

次のスクリプトは、部門の名前とそれらの部門に属する従業員の数を返す必要があります。マーケティング、エグゼクティブ、および営業部門の従業員は '0' ですが、戻り値は '0' ではなく '1' です。どうすれば修正できますか?

select Department, Departments.DepartmentID, count(*) as 'NumOfEmps' 
from Departments
left join Employees
on   Employees.DepartmentID = Departments.DepartmentID
group by Departments.DepartmentID,Department

ここに画像の説明を入力

4

2 に答える 2

6

1 つのクエリですべてを行うことはできません。最初に従業員数を取得し、次に集計結果を使用して関連する部門情報 (名前など) を取得するサブクエリが必要です。

SELECT Department, Departments.DepartmentID, t.NumOfEmps
FROM Departments
LEFT JOIN (SELECT DepartmentID, count(*) as 'NumOfEmps'
           FROM Employees
           GROUP BY DepartmentID) t
  ON t.DepartmentID = Departments.DepartmentID

リストされていないため、スキーマについていくつかの仮定を立てています。列名は少しずれているかもしれませんが、これが一般的な考え方です。それが役に立てば幸い。

于 2012-05-10T19:21:20.157 に答える
5

Count(*)カウントしたいもの、つまり従業員に count を使用しないでください。

Count(*)行全体をカウントします。部門の各部門には常に少なくとも 1 つのレコードが存在するため、カウントを行うと(*)、常に少なくとも 1 つのレコードが取得されます。

SELECT d.Department, d.DepartmentID, count(e.EmployeeID)
FROM Departments d
    LEFT JOIN employees e
    ON d.DepartmentID = e.DepartmentID
GROUP BY 
 d.Department, d.DepartmentID

デモ

于 2012-05-10T19:35:43.223 に答える