복붙노트

[SQL] 어떻게 급여 테이블에서 세 번째 또는 n 번째 최대 급여를 찾는 방법은?

SQL

어떻게 급여 테이블에서 세 번째 또는 n 번째 최대 급여를 찾는 방법은?

어떻게 최적화 된 방법으로 급여 테이블 (다는 EmpID, EmpName, EmpSalary)에서 세 번째 또는 n 번째 최대 급여를 찾는 방법은?

해결법

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

    1.사용 (원하는 경우 단일) ROW_NUMBER 또는 (관련된 모든 행에 대해) DENSE_RANK :

    사용 (원하는 경우 단일) ROW_NUMBER 또는 (관련된 모든 행에 대해) DENSE_RANK :

    WITH CTE AS
    (
        SELECT EmpID, EmpName, EmpSalary,
               RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC)
        FROM dbo.Salary
    )
    SELECT EmpID, EmpName, EmpSalary
    FROM CTE
    WHERE RN = @NthRow
    
  2. ==============================

    2.행 수 :

    행 수 :

    SELECT Salary,EmpName
    FROM
      (
       SELECT Salary,EmpName,ROW_NUMBER() OVER(ORDER BY Salary) As RowNum
       FROM EMPLOYEE
       ) As A
    WHERE A.RowNum IN (2,3)
    

    하위 쿼리 :

    SELECT *
    FROM Employee Emp1
    WHERE (N-1) = (
                   SELECT COUNT(DISTINCT(Emp2.Salary))
                   FROM Employee Emp2
                   WHERE Emp2.Salary > Emp1.Salary
                   )
    

    최고 키워드 :

    SELECT TOP 1 salary
    FROM (
          SELECT DISTINCT TOP n salary
          FROM employee
          ORDER BY salary DESC
          ) a
    ORDER BY salary
    
  3. ==============================

    3.이 시도

    이 시도

    SELECT TOP 1 salary FROM (
       SELECT TOP 3 salary 
       FROM employees 
       ORDER BY salary DESC) AS emp 
    ORDER BY salary ASC
    

    3 당신은 어떤 값을 대체 할 수 ...

  4. ==============================

    4.당신은 n 번째 최대와 최소 급여 쿼리 그래서 최적화 방법 수단은, TOP 키워드를 사용하려는 경우로서 다음하지만 쿼리는 집계 함수 이름을 사용하여 역순으로 까다로운 같이 :

    당신은 n 번째 최대와 최소 급여 쿼리 그래서 최적화 방법 수단은, TOP 키워드를 사용하려는 경우로서 다음하지만 쿼리는 집계 함수 이름을 사용하여 역순으로 까다로운 같이 :

    N 최대 급여 :

    SELECT MIN(EmpSalary)
    FROM Salary
    WHERE EmpSalary IN(SELECT TOP N EmpSalary FROM Salary ORDER BY EmpSalary DESC) 
    

    예를 들면 : 3 최대 급여 :

    SELECT MIN(EmpSalary)
    FROM Salary
    WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary DESC) 
    

    N 최소 급여 :

    SELECT MAX(EmpSalary)
    FROM Salary
    WHERE EmpSalary IN(SELECT TOP N EmpSalary FROM Salary ORDER BY EmpSalary ASC)
    

    예를 들어 3 최소 급여 :

    SELECT MAX(EmpSalary)
    FROM Salary
    WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary ASC)
    
  5. ==============================

    5.너무 간단한 당신이 하위 쿼리를 사용하는 경우!

    너무 간단한 당신이 하위 쿼리를 사용하는 경우!

    SELECT MIN(EmpSalary) from (
    SELECT EmpSalary from Employee ORDER BY EmpSalary DESC LIMIT 3
    );
    

    당신은 여기에 단지 LIMIT 제한 후 n 번째 값을 변경할 수 있습니다.

    다음은이 직원 주문에서 EmpSalary DESC 제한 3으로 하위 쿼리 선택 EmpSalary에; 직원들의 상위 3 개 급여를 반환합니다. 결과 중 우리는 직원의 3 TOP 급여를 얻을 수 MIN 명령을 사용하여 최소 급여를 선택합니다.

  6. ==============================

    6.당신의 최대 수와 N 교체

    당신의 최대 수와 N 교체

    SELECT *
    FROM Employee Emp1
    WHERE (N-1) = (
    SELECT COUNT(DISTINCT(Emp2.Salary))
    FROM Employee Emp2
    WHERE Emp2.Salary > Emp1.Salary)
    

    설명

    내부 쿼리 (서브 쿼리)이이 케이스 Emp1 테이블에 외부 쿼리에서 값을 (사용하기 때문에 상관 하위 쿼리라고 어떤 내부 쿼리입니다 - 위의 쿼리는 전에 같은 것을 본적이 없다면 매우 혼동이 될 수 있습니다 )에서이 WHERE 절입니다.

    그리고 소스

  7. ==============================

    7.서브 쿼리를 사용하지 않고 급여 테이블에서 제 3 또는 제 n 번째 최대 급여

    서브 쿼리를 사용하지 않고 급여 테이블에서 제 3 또는 제 n 번째 최대 급여

    select salary from salary
       ORDER   BY salary DESC
       OFFSET  N-1 ROWS
       FETCH NEXT 1 ROWS ONLY
    

    셋째 들어 가장 높은 급여는 N-1 대신에 2를 넣어

  8. ==============================

    8.

    SELECT Salary,EmpName
    FROM
    (
    SELECT Salary,EmpName,DENSE_RANK() OVER(ORDER BY Salary DESC) Rno from EMPLOYEE
    ) tbl
    WHERE Rno=3
    
  9. ==============================

    9.n 번째 가장 높은 급여를 가져 오는 쿼리 다음을 참조하십시오. 이 방법으로 당신은 MYSQL에서 n 번째 가장 높은 급여를 얻을. 당신이 얻을 n 번째 가장 낮은 연봉을 원하는 경우에만 쿼리에 ASC에 의해 DESC를 교체해야합니다.

    n 번째 가장 높은 급여를 가져 오는 쿼리 다음을 참조하십시오. 이 방법으로 당신은 MYSQL에서 n 번째 가장 높은 급여를 얻을. 당신이 얻을 n 번째 가장 낮은 연봉을 원하는 경우에만 쿼리에 ASC에 의해 DESC를 교체해야합니다.

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

    10.방법 1 :

    방법 1 :

    SELECT TOP 1 salary FROM (
    SELECT TOP 3 salary 
     FROM employees 
      ORDER BY salary DESC) AS emp 
     ORDER BY salary ASC
    

    방법 2 :

      Select EmpName,salary from
      (
        select EmpName,salary ,Row_Number() over(order by salary desc) as rowid      
         from EmpTbl)
       as a where rowid=3
    
  11. ==============================

    11.

    SELECT EmpSalary 
    FROM salary_table 
    GROUP BY EmpSalary 
    ORDER BY EmpSalary DESC LIMIT n-1, 1;
    
  12. ==============================

    12.2008 년 우리는 우리가 사용할 수있는 관계없이 순위를 얻을 수 ROW_NUMBER () OVER (EmpSalary DESC BY ORDER)를 사용할 수 있습니다.

    2008 년 우리는 우리가 사용할 수있는 관계없이 순위를 얻을 수 ROW_NUMBER () OVER (EmpSalary DESC BY ORDER)를 사용할 수 있습니다.

    예를 들어 우리는 뭔가 다른 8 높은 이런 식으로, 또는 변경 @N를 얻을 수 또는 같은 경우 함수에서 매개 변수로 당신이 그것을 사용할 수 있습니다.

    DECLARE @N INT = 8;
    WITH rankedSalaries AS
    (
    SELECT
    EmpID
    ,EmpName
    ,EmpSalary,
    ,RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC)
    FROM salary
    )
    SELECT
    EmpID
    ,EmpName
    ,EmpSalary
    FROM rankedSalaries
    WHERE RN = @N;
    

    SQL 서버 2012 년이이 LAG를 사용하여 더 직관적으로 수행 알 수있다 ()를 사용합니다.

  13. ==============================

    13.

    declare @maxNthSal as nvarchar(20)
    SELECT TOP 3 @maxNthSal=GRN_NAME FROM GRN_HDR   ORDER BY GRN_NAME DESC
    print @maxNthSal
    
  14. ==============================

    14.이것은 어떤 SQL 인터뷰에서 인기있는 질문 중 하나입니다. 나는 열 n 번째 가장 높은 값을 찾기 위해 다른 쿼리를 작성하는 것입니다.

    이것은 어떤 SQL 인터뷰에서 인기있는 질문 중 하나입니다. 나는 열 n 번째 가장 높은 값을 찾기 위해 다른 쿼리를 작성하는 것입니다.

    나는 스크립트 아래를 실행하여 "직원"라는 이름의 테이블을 만들었습니다.

    CREATE TABLE Employee([Eid] [float] NULL,[Ename] [nvarchar](255) NULL,[Basic_Sal] [float] NULL)
    

    지금은 삽입 문 아래 실행하여이 테이블에 8 행을 삽입하기 위하여려고하고있다.

    insert into Employee values(1,'Neeraj',45000)
    insert into Employee values(2,'Ankit',5000)
    insert into Employee values(3,'Akshay',6000)
    insert into Employee values(4,'Ramesh',7600)
    insert into Employee values(5,'Vikas',4000)
    insert into Employee values(7,'Neha',8500)
    insert into Employee values(8,'Shivika',4500)
    insert into Employee values(9,'Tarun',9500)
    

    이제 우리는 다른 쿼리를 사용하여 위의 표에서 세번째 높은 Basic_sal을 찾을 수 있습니다. 내가 관리 스튜디오에서 쿼리 아래를 실행하고 아래의 결과입니다했다.

    select * from Employee order by Basic_Sal desc
    

    3 가장 높은 기본 급여 내가 같은 일을 3 개 가지 방법을 쓰고 있어요 8500이 될 것이라는 점을 우리는 위의 이미지에서 볼 수 있습니다. 쿼리 아래에 언급 한 세 가지를 실행함으로써 우리는 즉 8500 같은 결과를 얻을 것이다.

    첫 번째 방법 : - 행 번호 기능을 사용하여

    select Ename,Basic_sal
    from(
                select Ename,Basic_Sal,ROW_NUMBER() over (order by Basic_Sal desc) as rowid from Employee
          )A
    where rowid=2
    
  15. ==============================

    15.

    Select TOP 1 Salary as '3rd Highest Salary' from (SELECT DISTINCT TOP 3 Salary from Employee ORDER BY Salary DESC) a ORDER BY Salary ASC;
    

    나는 3 가장 높은 연봉을 표시하고

  16. ==============================

    16.

    SELECT MIN(COLUMN_NAME)
    FROM   (
               SELECT DISTINCT TOP 3     COLUMN_NAME
               FROM   TABLE_NAME
               ORDER BY
                      COLUMN_NAME        DESC
           ) AS 'COLUMN_NAME'
    
  17. ==============================

    17.--nth 가장 높은 급여

    --nth 가장 높은 급여

    select * 
    from (select lstName, salary, row_number() over( order by salary desc) as rn 
          from employee) tmp
    where rn = 2
    

    - (제 n-1) 높은 급여

    select * 
    from employee e1
    where 1 = (select count(distinct salary)  
               from employee e2
               where e2.Salary > e1.Salary )
    
  18. ==============================

    18.방법을 최적화 대신 하위 쿼리 만 사용 제한.

    방법을 최적화 대신 하위 쿼리 만 사용 제한.

    select distinct salary from employee order by salary desc limit nth, 1;
    

    제한 구문 여기 http://www.mysqltutorial.org/mysql-limit.aspx를 참조하십시오

  19. ==============================

    19.테이블에서 세 번째로 높은 값을 얻으려면

    테이블에서 세 번째로 높은 값을 얻으려면

    SELECT * FROM tableName ORDER BY columnName DESC LIMIT 2, 1
    
  20. ==============================

    20.하위 쿼리로 :

    하위 쿼리로 :

    SELECT salary from
    (SELECT rownum ID, EmpSalary salary from
    (SELECT DISTINCT EmpSalary from salary_table order by EmpSalary DESC)
    where ID = nth)
    
  21. ==============================

    21.이 쿼리

    이 쿼리

    SELECT DISTINCT salary
    FROM emp E WHERE
    &no =(SELECT COUNT(DISTINCT salary) 
    FROM emp WHERE E.salary <= salary)
    

    넣어 n을 가치 = 원하는

  22. ==============================

    22.

    set @n = $n
    
    SELECT a.* FROM ( select a.* , @rn = @rn+1  from EMPLOYEE order by a.EmpSalary desc ) As a  where rn = @n
    
  23. ==============================

    23.MySQL은 솔루션, N = 4 가정 테스트 :

    MySQL은 솔루션, N = 4 가정 테스트 :

    select min(CustomerID) from (SELECT distinct CustomerID FROM Customers order by CustomerID desc LIMIT 4) as A;
    

    또 다른 예:

    select min(country) from (SELECT distinct country FROM Customers order by country desc limit 3);
    
  24. ==============================

    24.이 코드를 사용해보십시오 : -

    이 코드를 사용해보십시오 : -

    SELECT *
       FROM one one1
       WHERE ( n ) = ( SELECT COUNT( one2.salary )
                       FROM one one2
                       WHERE one2.salary >= one1.salary
                     )
    
  25. ==============================

    25.이거 한번 해봐...

    이거 한번 해봐...

    SELECT MAX(salary) FROM employee WHERE salary NOT IN (SELECT * FROM employee ORDERBY salary DESC LIMIT n-1)
    
  26. ==============================

    26.

    select 
        Min(salary) 
    from ( select salary from employees order by salary desc) t
    where rownum<=3;
    

    2 가장 높은 급여, 위의 쿼리에서 2로 변경 3 및 N에 N 번째 가장 높은 급여에 대한 여기서 N = 1, 2, 3, 4 ....

  27. ==============================

    27.SELECT * FROM는 한계 4,1 (급여 DESC하여 고객 주문 구별 급여를 선택)

    SELECT * FROM는 한계 4,1 (급여 DESC하여 고객 주문 구별 급여를 선택)

    제한 4,1 수단은 처음 4 개 행을두고 한 후 다음 중 하나를 선택합니다.

    제한 및 ROWNUMBER은 사용중인 플랫폼에 따라 달라집니다.

    이 시도, 그것은 작동합니다.

  28. ==============================

    28.참고 : 교체하십시오 3 OFFSET

    참고 : 교체하십시오 3 OFFSET

  29. ==============================

    29.서브 쿼리는 항상 시간이 더 걸릴 :

    서브 쿼리는 항상 시간이 더 걸릴 :

    임의 최고 및 최저 데이터를 가져 오기 위해 쿼리 아래 사용

    최고 데이터 : ID 내림차순 한계 3,1에 의해 비즈니스 순서에서 선택 *;

    최저 데이터 : ID 오름차순 한계 3,1에 의해 비즈니스 순서에서 선택 *;

    n 번째 데이터를 얻을 수 3의 장소에서 N을 사용할 수 있습니다.

  30. ==============================

    30.테이블에서 N 번째 가장 높은 급여를 찾습니다. 여기 DENSE_RANK () 함수를 사용하여이 작업을 할 수있는 방법이다.

    테이블에서 N 번째 가장 높은 급여를 찾습니다. 여기 DENSE_RANK () 함수를 사용하여이 작업을 할 수있는 방법이다.

    select linkorder from u_links
    
    select max(linkorder) from u_links
    
    select max(linkorder) from u_links where linkorder < (select max(linkorder) from u_links)
    
    select top 1 linkorder 
           from ( select distinct top 2 linkorder from u_links order by linkorder desc) tmp 
    order by linkorder asc
    

    DENSE_RANK : 1. DENSE_RANK 행의 정렬 그룹에서 행의 순위를 계산하고 숫자로 순위를 반환합니다. 순위는 1로 시작하는 연속적인 정수입니다. 2.이 기능은 모든 숫자 데이터 유형 및 반환 번호 등의 인수를 받아들입니다. 3. 분석 함수로서 DENSE_RANK는 order_by_clause에서 value_exprs의 값을 기준으로 다른 행에 대해 반환되는 각 행의 계수를 계산한다. 위의 질의 4.이 순위는 직원 테이블의 샐에 따라 반환됩니다. 동점의 경우, 모든 행과 동일한 순위를 할당한다.

    WITH result AS ( 
         SELECT linkorder ,DENSE_RANK() OVER ( ORDER BY linkorder DESC ) AS  DanseRank 
    FROM u_links ) 
    SELECT TOP 1 linkorder FROM result WHERE DanseRank = 5
    
  31. from https://stackoverflow.com/questions/16234983/how-to-find-third-or-nth-maximum-salary-from-salary-table by cc-by-sa and MIT license