【问题标题】:Find department with maximum number of employees in Oracle SQL在 Oracle SQL 中查找员工人数最多的部门
【发布时间】:2019-03-17 00:35:51
【问题描述】:

我有这两张表,我需要找到员工人数最多的部门名称。

其他解决方案不适用于 Oracle,所以我发布了这个问题。此外,如果可以彻底解释查询,那将非常有帮助,因为我发现很难将其可视化。

EMPLOYEE

EMPNO EMPNAME MANAGER SALARY DEPT_NO
1     Puja    6       30000  2
2     Purabi  1       15000  3
3     Barun   6       23000  2
4     Sudha   1       20000  1
5     Amal    2       20000  1
6     Rakesh  3       30000  4

DEPARTMENT

Dept_No Dept_Name  Location
1       Production LaneA
2       Marketing  LaneB
3       Sales      LaneC
4       HR         LaneD

到目前为止,我可以设法获得最多的员工。所以我在想是否可以编写另一个子查询,在其中再次计算部门中的员工,并将它们与我在第一个查询中计算的 max_num_emp 进行比较。

这是检索最大员工人数的查询。它不返回 dept_no。

select count(dept_no)
from employee
group by dept_no
order by count(dept_no) desc
fetch first row only;

预期输出

DEPT_NAME
Production
Marketing

我还可以在查询中添加 dept_no 列,然后我将不得不以某种方式找出如何获得最大值,这在某种程度上给了我错误,因为查询违反了一些规则。我实际上尝试过做 max(above query)。

所以我想只获得最大的员工人数,然后确定拥有这么多员工的所有部门并显示他们的名字。

【问题讨论】:

  • 你试过什么?例如,您的查询可能会获取每个部门的员工人数。
  • 我已经添加了。请检查已编辑的问题。

标签: sql oracle


【解决方案1】:

您有一个工作查询,需要将其加入到表 department

select d.Dept_Name   
from department d inner join (
  select dept_no
  from employee
  group by dept_no
  order by count(*) desc
  fetch first row only
) t
on t.dept_no = d.dept_no

编辑
试试这个(我不能尝试):

select d.dept_name 
from department d inner join (
  select x.dept_no from (
    select dept_no, rank() over (order by count(*) desc) rn
    from employee
    group by dept_no
    order by count(dept_no) desc
  ) x
  where x.rn = 1
) t
on t.dept_no = d.dept_no

【讨论】:

  • 您好,查询运行良好,但如何只显示 dept_name 列?我只需要输出中的一列。谢谢!
  • 您好,现在只显示部门名称,但有 2 个部门的员工人数最多。目前只显示一个。
  • 这就是您代码中的fetch first row only 所做的。
  • 您可以检查我为什么在问题末尾的查询中添加该子句。我已经清楚地解释过这是因为我无法让max() 函数工作。
  • 它只显示Production。
【解决方案2】:

您可能使用了FETCH..FIRST 语法,使用WITH TIES 而不是ONLY

SELECT d.dept_name
  FROM department d 
   JOIN employee e ON d.dept_no = e.dept_no
GROUP BY d.dept_name
ORDER BY COUNT(*) 
DESC FETCH FIRST 1 ROW WITH TIES ;

Demo

【讨论】:

  • 这是一个非常简单的解决方案。谢谢!
【解决方案3】:

如果您不是在寻找重复项,那么:

select d.dept_name, count(*)
from department d join
     employee e
     on d.dept_no = e.dept_no
group by d.dept_no, d.dept_name
order by count(dept_no) desc
fetch first row only;

【讨论】:

  • 我需要所有员工人数最多的部门名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 2014-02-05
相关资源
最近更新 更多