복붙노트

[SQL] SQL 쿼리는 급여 테이블에서 N 번째 가장 높은 급여를 찾을 수

SQL

SQL 쿼리는 급여 테이블에서 N 번째 가장 높은 급여를 찾을 수

어떻게 SQL Server의 급여를 포함하는 테이블에서 N 번째 가장 높은 급여를 찾을 수 있습니까?

해결법

  1. ==============================

    1.당신은 대답을 유도하기 위해 공통 테이블 식 (CTE)를 사용할 수 있습니다.

    당신은 대답을 유도하기 위해 공통 테이블 식 (CTE)를 사용할 수 있습니다.

    하자 당신이 테이블 급여에서 다음과 같은 급여를 말한다 :

     EmployeeID  Salary
    --------------------
         10101   50,000
         90140   35,000
         90151   72,000
         18010   39,000
         92389   80,000
    

    우리는 사용합니다 :

    DECLARE @N int
    SET @N = 3  -- Change the value here to pick a different salary rank
    
    SELECT Salary
    FROM (
        SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary
        FROM Salaries
    ) as SalaryCTE
    WHERE SalaryRank = @N
    

    이것은 (세 번째로 높은 기록을 포함하는) 세 번째 행을가 내림차순으로 급여으로 분류 한 후 다음 각 행에 대한 행 번호를 생성 검색합니다.

    CTE를 원하지 않는다 (또는 2000 SQL에 갇혀있다) 분들을 위해 :

    [주 :이 수행하는 상기 예보다 현저하게 더; CTE에 대한 36 %와 부질 64 %]의 쿼리 비용 실행 플랜 쇼로 나란히 실행 :

    SELECT TOP 1 Salary
    FROM 
    (
        SELECT TOP N Salary
        FROM Salaries
        ORDER BY Salary DESC
    ) SalarySubquery
    ORDER BY Salary ASC
    

    여기서 N은 사용자에 의해 정의된다.

    SalarySubquery 내가 서브 쿼리, 또는 괄호에있는 쿼리에 준 별명입니다.

    무엇 하위 쿼리가하는 것은 가장 큰 봉급으로 그들을 (이 경우 3 말 것) 상단의 N 급여를 선택하고, 주문이다.

    우리는 세 번째로 높은 연봉을보고 싶은 경우, 하위 쿼리 반환합니다 :

     Salary
    -----------
    80,000
    72,000
    50,000
    

    외부 쿼리는 우리가 가장 큰에 작은에서 정렬이 시간을 오름차순으로 정렬하고를 제외하고, 그래서 5 만이 첫 번째 레코드가 오름차순으로 정렬 될 것이다, 서브 쿼리에서 첫 번째 급여를 선택합니다.

    당신이 볼 수 있듯이, 50,000 실제로 예에서 세 번째로 높은 연봉이다.

  2. ==============================

    2.당신은 특정 행을 선택하는 ROW_NUMBER 사용할 수 있습니다. 예를 들어, 42 가장 높은 급여 :

    당신은 특정 행을 선택하는 ROW_NUMBER 사용할 수 있습니다. 예를 들어, 42 가장 높은 급여 :

    select  *
    from    (
            select  row_number() over (order by Salary desc) as rn
            ,       *
            from    YourTable
            ) as Subquery
    where   rn = 42
    

    ROW_NUMBER와 같은 윈도우 함수는 조항에 의해 선택하거나 순서대로 표시 할 수 있습니다. 해결 방법은 하위 쿼리에 ROW_NUMBER를 배치합니다.

  3. ==============================

    3.

    select MIN(salary) from (
    select top 5 salary from employees order by salary desc) x
    
  4. ==============================

    4.

    EmpID   Name    Salary
    1   A   100
    2   B   800
    3   C   300
    4   D   400
    5   E   500
    6   F   200
    7   G   600
    
    SELECT * FROM Employee E1
    WHERE (N-1) = (
                    SELECT COUNT(DISTINCT(E2.Salary))
                    FROM Employee E2
                    WHERE E2.Salary > E1.Salary
                  )
    

    당신은 5 가장 높은 직원보다 급여 이상을 가지고 총 4 명의 직원이 의미 다섯째 가장 높은 급여를 검색해야하는 경우를 가정 해 봅시다. 그래서 외부 쿼리의 각 행에 대해 현재 급여보다 큰 급여의 총 수를 확인합니다. 외부 쿼리가 일치하지 않습니다 (5-1) = 6 outerquery의 절을 100 첫째 작동하고 6 될 것입니다 (100)보다 더 큰 임금의 번호를 확인합니다. 그런 다음 800, 체크 (800)보다 큰 급여의 번호를, 마지막으로 300 4 = 거짓 다음 작업은 표 4 개 레코드를 완전히 거기에 이상 300 따라서 4 = 4 where 절을 충족하고 돌아갑니다 (3) C (300).

  5. ==============================

    5.시도 해봐...

    시도 해봐...

    use table_name
    select MAX(salary)
    from emp_salary
    WHERE marks NOT IN (select MAX(marks)
    from student_marks )
    
  6. ==============================

    6.오라클, MySQL의 등 특별한 기능의 특정을 사용하지 않고 간단한 방법 EMPLOYEE 테이블의 급여에서 가정하는 것은 반복 할 수 있습니다. 각 ID의 순위를 알아 쿼리를 사용합니다.

    오라클, MySQL의 등 특별한 기능의 특정을 사용하지 않고 간단한 방법 EMPLOYEE 테이블의 급여에서 가정하는 것은 반복 할 수 있습니다. 각 ID의 순위를 알아 쿼리를 사용합니다.

    select  *
    from  (
    select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from     
    EMPLOYEE ) where  distsal >tout.sal)  as rank  from EMPLOYEE tout
    ) result
    order by rank
    

    처음에 우리는 별개의 급여를 찾을 수 있습니다. 그럼 우리가 각 행보다 큰 별개의 급여의 수를 알아보십시오. 이것은 아무것도하지만 ID의 순위입니다. 가장 높은 급여의 경우,이 카운트는 0이됩니다. 그래서 '+1'이 1 순위를 시작하기 위해 수행됩니다.

    이제 우리는 위의 쿼리에 WHERE 절을 추가하여 N 번째 순위에서 ID를 얻을 수 있습니다.

    select  *
    from  (
    select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from     
    EMPLOYEE ) where  distsal >tout.sal)  as rank  from EMPLOYEE tout
    ) result
    where rank = N;
    
  7. ==============================

    7.가장 쉬운 방법은 SQL에서 테이블에서 두번째 가장 높은 급여를 얻을 수 있습니다 :

    가장 쉬운 방법은 SQL에서 테이블에서 두번째 가장 높은 급여를 얻을 수 있습니다 :

    sql> select max(sal) from emp where sal not in (select max(sal) from emp);
    
  8. ==============================

    8.망가는 별개의 키워드를 사용하는 것을 잊지 : -

    망가는 별개의 키워드를 사용하는 것을 잊지 : -

    SELECT TOP 1 Salary
    FROM 
    (
        SELECT Distinct TOP N Salary
        FROM Salaries
        ORDER BY Salary DESC
    ) SalarySubquery
    ORDER BY Salary ASC
    
  9. ==============================

    9.해결 방법 1 : (참고 : 때문에 서브 쿼리의 성능이 낮은) SQL 서버, MySQL은, DB2, 오라클, 테라 데이타에서 작동합니다 N 번째 가장 높은 급여, 그리고 거의 모든 다른 RDBMS를 찾기 위해이 SQL

    해결 방법 1 : (참고 : 때문에 서브 쿼리의 성능이 낮은) SQL 서버, MySQL은, DB2, 오라클, 테라 데이타에서 작동합니다 N 번째 가장 높은 급여, 그리고 거의 모든 다른 RDBMS를 찾기 위해이 SQL

    SELECT * /*This is the outer query part */
    FROM Employee Emp1
    WHERE (N-1) = ( /* Subquery starts here */
    SELECT COUNT(DISTINCT(Emp2.Salary))
    FROM Employee Emp2
    WHERE Emp2.Salary > Emp1.Salary)
    

    위의 쿼리에서 이해하는 가장 중요한 것은 서브 쿼리가 행이 외부 쿼리에 의해 처리되는 각각의 모든 시간을 평가한다는 것입니다. 내부 질의뿐만 아니라 Emp1 값을 사용하기 때문에 즉, 내부 질의는 독립적 외부 쿼리를 처리 할 수 ​​없다.

    N 번째 높은 연봉을 발견하기 위해, 우리는 단지 자체보다 정확히 N-1 급여 이상이 급여를 찾을 수 있습니다.

    해결 방법 2 : SQL Server의 TOP 키워드를 사용하여 n 번째 가장 높은 급여를 찾기

    SELECT TOP 1 Salary
    FROM (
          SELECT DISTINCT TOP N Salary
          FROM Employee
          ORDER BY Salary DESC
          ) AS Emp
    ORDER BY Salary
    

    해결 방법 3 : TOP을 사용하지 않고 SQL Server에서 n 번째 가장 높은 급여를 찾기

    SELECT Salary FROM Employee 
    ORDER BY Salary DESC OFFSET N-1 ROW(S) 
    FETCH FIRST ROW ONLY
    

    참고 나는 개인적으로 위의 SQL을 테스트하지 않았는지, 그리고 난 그렇게 믿어 SQL Server의 그것만이 작업을 2012 년까지.

  10. ==============================

    10.

    SELECT * FROM 
    (select distinct postalcode  from Customers order by postalcode DESC)
    limit 4,1;
    

    4 여기 수단은 처음 4 떠나 다음 1을 보여줍니다.

    그것은 나를 위해 작동이보십시오.

  11. ==============================

    11.n 번째 가장 높은 급여를 찾을 수 하나 개의 쿼리 아주 간단합니다

    n 번째 가장 높은 급여를 찾을 수 하나 개의 쿼리 아주 간단합니다

    SELECT DISTINCT(Sal) FROM emp ORDER BY Salary DESC LIMIT n,1
    
  12. from https://stackoverflow.com/questions/3850034/sql-query-to-find-nth-highest-salary-from-a-salary-table by cc-by-sa and MIT license