ORACLE SQL:显示部门的部门名称,ID和员工数量。拥有最少的员工数量

时间:2015-05-15 04:53:15

标签: sql oracle select oracle11g

注意,这是一个家庭作业问题!

显示部门编号,部门名称以及在部门中工作人数最少的员工人数。

我可以弄清楚每个部门有多少员工,但我如何只展示员工人数最少的部门呢?

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;

2 个答案:

答案 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即可查看实际数据。