2011-09-14 164 views
0

我想解决一个简单的问题,但我越来越多的细节。选择最大值

我有2个表,一个有员工,另一个有部门。我的问题:我试图检查哪个部门拥有最多的员工,并仅输出特定的部门。

到目前为止,我有:

select count(*) Number_of_employees 
     from department d, employee e 
     where d.department_id = e.department_id 
     group by department_name 

,输出:

NUMBER_OF_EMPLOYEES  
---------------------- 
2      
4      
3      
3      
3 

我的目标是只输出与这与4名员工的部门雇员最多的部门。

我尝试过使用MAX和JOIN,但是我不太擅长加入,所以我们将不胜感激。

回答

1
select department_name from 
     (select department_name, count(*) Number_of_employees 
      from department d, employee e 
      where d.department_id = e.department_id 
      group by department_name 
      order by 2 desc) 
    where rownum = 1 

应该做的。

HTH

+0

谢谢!如果没有最终的rownum = 1,有没有不同的方法可以解决这个问题? – Geo

3

@Zsolt Botykai

我认为这是正确的,除了由需求为了DESC,我不认为你可以参考number_of_employees查询里面。 (反正你不能在oracle中)。

select department_name 
    from 
    (select department_name 
      ,number_of_employees 
     from 
     (select department_name, count(*) Number_of_employees 
      from department d, employee e 
      where d.department_id = e.department_id 
      group by department_name) 
     order by Number_of_employees DESC) 
    where rownum = 1 
+0

感谢您指出错误!我不在我的数据库前面一段时间,只是在晚上撰写答案:-) –

3

你可以做到这一点,这样既避免了这个rownum:

select 
     max(d.department_name) keep (dense_rank first order by count(1) desc) as department_name 
     , count(1) as number_of_employees 
    from employee e 
    inner join department d on (e.department_id = d.department_id) 
    group by d.department_name 
    ; 
+0

感谢您的帮助 – Geo