注意,这是一个家庭作业问题!
显示部门编号,部门名称以及在部门中工作人数最少的员工人数。
我可以弄清楚每个部门有多少员工,但我如何只展示员工人数最少的部门呢?
SELECT employees.department_id, departments.department_name, COUNT(employee_id)
FROM employees
JOIN departments
ON employees.department_id = departments.department_id
GROUP BY employees.department_id, departments.department_name;
答案 0 :(得分:1)
您需要的是having
子句,它允许您在应用group by
子句后应用条件。换句话说,它允许您对聚合表达式应用条件:
SELECT employees.department_id, departments.department_name, COUNT(employee_id)
FROM employees
JOIN departments
ON employees.department_id = departments.department_id
GROUP BY employees.department_id, departments.department_name;
HAVING COUNT(*) > 5 -- Here!
答案 1 :(得分:0)
Oracle(以及大多数其他DBMS)支持窗口化聚合函数,这些函数通常比旧式SQL更有效:
SELECT department_id, department_name, CNT
FROM
(
SELECT employees.department_id, departments.department_name,
COUNT(employee_id) AS CNT,
RANK()
OVER (ORDER BY COUNT(employee_id) DESC) AS rnk
FROM employees
JOIN departments
ON employees.department_id = departments.department_id
GROUP BY employees.department_id, departments.department_name
) dt
WHERE rnk = 1;
{<1}}在聚合后处理并将1分配给最高COUNT,只需运行内部SQL即可查看实际数据。