2017-10-28 1 views
0

2 번째로 많은 번호를 찾으십시오. emp 및 dept 테이블에서 dname으로 작업하는 직원아래 조건에 대해 sql 쿼리를 작성 하시겠습니까?

select d.dname,count(*) "totemp" from emp e,dept d 
where e.deptno=d.deptno 
group by (d.dname) 
having count(*)=(select max(count(*)) from emp e,dept d 
where e.deptno=d.deptno 
group by d.dname); 

이 쿼리는 가장 높은 번호를 표시합니다. dname으로 작업하는 직원의 하지만 dname으로 2 위를 원합니다.

답변

0

먼저 각 부서의 직원 수를 계산하려면 dense_rank() 창 함수를 사용하여 부서 그룹의 순위 값을 지정하고 마지막으로 두 번째로 순위가 지정된 부서를 선택하십시오. 그들은 모두가 나타납니다 직원의 수가 같은 하나 이상의 depts있다, 그래서 만약

select dname 
from (
    select dname, dense_rank() over (order by cnt desc) as rnk 
    from (
    select d.dname, count(*) as cnt 
    from emp e 
    join dept d using (deptno) 
    group by d.dname 
) t 
) x 
where rnk = 2 

, 제대로 관계를 해결 dense_rank() 기능을 사용.

row_number() 기능을 사용하여 솔루션을 변경할 수 있습니다. 두 번째 위치에 관계가있는 경우에도 임의의 부서를 선택할 수 있습니다.

+0

하지만 여기에는 dname 만 표시되어 있지만 dname에는 총 번호가 필요합니다. 직원 –

+0

의 'cnt' 열을 추가하면 모든 것이 나타납니다. –

+0

예 ... 감사합니다 ...... –

관련 문제