我有以下格式2個表格更高:SQL查詢列表那些低於平均
- 員工(僱員,EmployeeName,DepartmentID的)
- 部門(DepartmentID的,DEPTNAME)
在每個部門工作的僱員人數多於部門僱員人數的平均數。
即時通訊尋求結果的格式如下:
Dept Name | Num of Emp
engineering | 10
science | 15
我有以下格式2個表格更高:SQL查詢列表那些低於平均
在每個部門工作的僱員人數多於部門僱員人數的平均數。
即時通訊尋求結果的格式如下:
Dept Name | Num of Emp
engineering | 10
science | 15
,因爲員工可以在只有一個部門,員工的平均數量就是部門總數中員工總數。所以如何:
SELECT dept.name, COUNT(emp.id) AS employeeCount
FROM emp INNER JOIN dept ON emp.deptId = dept.id
GROUP BY dept.name
HAVING (COUNT(emp.id) >
(SELECT COUNT(*) FROM emp)/
(SELECT COUNT(*) FROM dept))
SELECT deptName, cnt
FROM (
SELECT departmentID, COUNT(*) AS cnt
FROM employee
GROUP BY
departmentID
HAVING COUNT(*) >=
(
SELECT AVG(cnt)
FROM (
SELECT COUNT(*) AS cnt
FROM employee
GROUP BY
departmentID
)
)
) e
JOIN departments d
ON d.departmentID = e.departmentID
在Oracle
,您可以使用分析功能,這是更優雅:
SELECT DeptName, cnt
FROM (
SELECT q.*, AVG(cnt) OVER() AS acnt
FROM (
SELECT departmentID, COUNT(*) AS cnt
FROM employee
GROUP BY
departmentID
) q
) e
JOIN departments d
ON d.departmentID = e.departmentID
WHERE cnt >= acnt
這當然假設有0名僱員的部門對平均值有貢獻。 – Quassnoi 2009-09-25 15:18:55
@Quassnoi:大多數平均值不包括人口中的零點嗎? – 2009-09-26 20:19:47