2012-12-23 2 views
2

이 링크 http://javarevisited.blogspot.in/2012/12/how-to-find-second-highest-or-maximum-salary-sql.html은 Employee 테이블에서 두 번째로 높은 급여를 검색하는 것으로 나타났습니다. 예와 같이 테이블 스키마를 참조하면 세 번째로 높은 당신이 3에 의해 2를 교체하는 경우 MySQL을 위해, 당신은직원 테이블 쿼리에서 급여 검색

SELECT salary FROM 
    (SELECT salary FROM Employee ORDER BY salary DESC LIMIT 2) AS emp 
ORDER BY salary LIMIT 1 

를 통해 두 번째로 높은 얻을 수 있다는 설명이 예제가있다

+0

사용중인 RDBMS는 무엇입니까? –

+0

@ MahmoudGamal..DB2 형제 ..! – user1924563

답변

2

직원 테이블 자체에서 제 4 회 가장 높은 연봉, 당신은 3을 얻을 것이다 제일 높은. 하위 서열은 n 최고 급여를 선택하고 바깥 쪽 질의는 그 결과 중 가장 낮은 것을 선택합니다.

이 스키마는 약간 다른 구문을 사용하여 모든 RDBMS에서 사용할 수 있습니다. DB2를 들어, 내가 (하지만 난 그 순간에 그것을 확인할 수 없습니다) 다음 작동합니다 생각 :

SELECT salary FROM 
    (SELECT salary FROM Employee ORDER BY salary DESC FETCH FIRST 2 ROWS ONLY) AS emp 
ORDER BY salary FETCH FIRST ROW ONLY 
1
select * from (
    select * from employee 
    order by salary desc 
    limit 4) x 
order by salary 
limit 1; 

당신은이 개 제한을 적용 상위 4 행을 얻을 수있는 내부 쿼리 하나를 다음 다른 제한 그 중에서 가장 낮은 행을 얻으려면.

1

DENSE_RANK OLAP 함수를 사용하여 순위를 정의한 다음 원하는 순서로 값을 선택하는 것이 가장 좋습니다.

SELECT MAX(salary) 
FROM (
    SELECT DENSE_RANK() OVER (ORDER BY salary DESC) AS rank 
     , salary 
    FROM employee 
    ) AS xxx 
WHERE rank = 3 

DENSE_RANK 데이터에있는 "관계"처리됩니다 예를 들어, 세 번째로 높은 급여를 찾을 수 있습니다. 같은 급여를 가진 한 명 이상의 직원이있을 수 있으므로 MAX 함수를 사용하여 하나만 유지하십시오. limit 1 구문을 사용할 수도 있지만 사용하지 않았습니다.