복붙노트

[SQL] 오라클의 N 번째 최대 급여

SQL

오라클의 N 번째 최대 급여

내가 쿼리 아래 사용하고 오라클의 N 번째 최대 샐를 찾으려면

SELECT DISTINCE sal 
FROM emp a 
WHERE (
       SELECT COUNT(DISTINCE sal) 
       FROM emp b 
       WHERE a.sal<=b.sal)=&n;

해결법

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

    1.이 시도

    이 시도

    select *
      from
      (
        select
            sal
              ,dense_rank() over (order by sal desc) ranking
        from   table
      )
      where ranking = 4 -- Replace 4 with any value of N
    
  2. ==============================

    2.

    SELECT sal FROM (
        SELECT sal, row_number() OVER (order by sal desc) AS rn FROM emp
    )
    WHERE rn = 3
    

    네, 테이블이 큰 경우 실행하는 데 시간이 더 소요됩니다. "N 번째 행이"유일한 방법은 쿼리에 대한 그러나 모든 데이터를 통해 일종의 그것을 보는 것입니다. 당신이 샐에 인덱스를 가지고 있다면 그것은 확실히 훨씬 더 빨리 될 것입니다.

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

    3.

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

    4.또한 언급 한 다음과 같이 우리가 쓸 수 있습니다.

    또한 언급 한 다음과 같이 우리가 쓸 수 있습니다.

    행 분 (SAL)을 선택 (EMP로부터 선택 SAL 어디 ROWNUM =

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

    5.이 테이블 직원의 3 최대 급여를 표시합니다. 당신이 다음 값을 (당신이 원하는 무엇이든) 5 또는 6을 찾으려면 단지 ROWNUM <= 5 "또는"ROWNUM <= 6 등이 같은 경우 조건을 변경 ...

    이 테이블 직원의 3 최대 급여를 표시합니다. 당신이 다음 값을 (당신이 원하는 무엇이든) 5 또는 6을 찾으려면 단지 ROWNUM <= 5 "또는"ROWNUM <= 6 등이 같은 경우 조건을 변경 ...

    select min(sal) from(select distinct(sal) from emp  where rownum<=3 order by sal desc);
    
  6. ==============================

    6.

     SELECT sal
        FROM (
                    SELECT empno,
                                 deptno, sal,
                                  dense_rank( ) over ( partition by deptno order by sal desc) NRANK
                    FROM emp
                )
        WHERE NRANK = 4
    
  7. ==============================

    7.

    SELECT *
        FROM (
                    SELECT empno,
                           deptno, sal,
                           dense_rank( ) over ( order by sal desc) NRANK
                    FROM emp
                )
        WHERE NRANK = 4
    
  8. ==============================

    8.당신이 원하는 번호 2를 대체 할 수있다

    당신이 원하는 번호 2를 대체 할 수있다

    select * from ( select distinct (sal),ROW_NUMBER() OVER (order by sal desc) rn from emp ) where rn=2
    
  9. ==============================

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

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

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

    10.지금 당신은 당신이 확실히 얻을 것이다이 시도 :

    지금 당신은 당신이 확실히 얻을 것이다이 시도 :

    SELECT DISTINCT sal 
        FROM emp a 
        WHERE (
               SELECT COUNT(DISTINCT sal) 
               FROM emp b 
               WHERE a.sal<=b.sal)=&n;
    

    귀하의 정보를 들어, n 번째 최소 샐를 원하는 경우 :

    SELECT DISTINCT sal 
    FROM emp a 
    WHERE (
           SELECT COUNT(DISTINCT sal) 
           FROM emp b 
           WHERE a.sal>=b.sal)=&n;
    
  11. ==============================

    11.행 분 (SAL)을 선택 (샐 DESC 직원들의 순서 구별 SAL 해당) 여기서 ROWNUM <= N;

    행 분 (SAL)을 선택 (샐 DESC 직원들의 순서 구별 SAL 해당) 여기서 ROWNUM <= N;

    가장 높은 염은 검색하려는 어떤 수를 놓습니다.

  12. ==============================

    12.밖으로 다음보십시오 :

    밖으로 다음보십시오 :

    SELECT *
    FROM
      (SELECT rownum AS rn,
        a.*
      FROM
        (WITH DATA AS -- creating dummy data
        ( SELECT 'MOHAN' AS NAME, 200 AS SALARY FROM DUAL
        UNION ALL
        SELECT 'AKSHAY' AS NAME, 500 AS SALARY FROM DUAL
        UNION ALL
        SELECT 'HARI' AS NAME, 300 AS SALARY FROM DUAL
        UNION ALL
        SELECT 'RAM' AS NAME, 400 AS SALARY FROM DUAL
        )
      SELECT D.* FROM DATA D ORDER BY SALARY DESC
        ) A
      )
    WHERE rn = 3; -- specify N'th highest here (In this case fetching 3'rd highest)
    

    건배!

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

    13.

    select * FROM (
    select EmployeeID, Salary
    , dense_rank() over (order by Salary DESC) ranking
    from Employee
    )
    WHERE ranking = N;
    

    급여에 사용 DENSE_RANK ()가 same.So이 대신 순위를 사용하는 적절한 출력을 제공되어야한다 ().

  14. ==============================

    14.

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

    이것은 당신이 N 10를 대체 할 수있는, 10 일 최대 급여입니다.

  15. ==============================

    15.이러한 쿼리는 또한 작동합니다 :

    이러한 쿼리는 또한 작동합니다 :

    해결 방법 1)

    SELECT ename, sal 
    FROM Emp e1 WHERE n-1 = (SELECT COUNT(DISTINCT sal) 
                             FROM Emp e2 WHERE e2.sal > e1.sal)
    

    ROW_NUM 기능을 사용하여) 2 해결 방법.

    SELECT * 
    FROM ( 
       SELECT e.*, ROW_NUMBER() OVER (ORDER BY sal DESC) rn FROM Emp e 
    ) WHERE rn = n;
    

    대안 3) ROWNUM 의사 열을 사용하여

    Select MAX(SAL) 
    from (
       Select * 
       from (
          Select * 
          from EMP 
          order by SAL Desc
       ) where rownum <= n
    )
    
  16. ==============================

    16.이것은 또한 작동합니다 :

    이것은 또한 작동합니다 :

    with data as 
    (
    select sal,rwid from (
    select salary as sal,rowid as rwid from salary order by salary desc
    )
    where rownum < 5
    )
    select * from salary a 
    where rowid = (select min(rwid) from data)
    
  17. ==============================

    17.

    select min(sal) from (select distinct(sal) from emp  order by sal desc) where rownum <=&n;
    

    속옷 아래 주어진 출력 아래를 제공 SAL DESC 의해 EMP 순서 구별 (SAL)을 선택하여 질의.

    의지 5000 3000 2,975 2,850 2,450 1,600 1,500 1,300 1,250 1,100 950 (800)

    샐 내림차순으로 EMP 순서에서 위의 쿼리를 선택 샐에서 구별없이 출력은 아래와 같이 주어진다.

    의지 5000 3000 3000 2,975 2,850 2,450 1,600 1,500 1,300 1,250 1,250 1,100 950 (800)

    아래로 외부 쿼리는 내가 넣어 4 최대 샐과에서 여기 시도 (예를 들어,을)를 'N 번째 최대 샐를 제공 할 것입니다.

    MIN (SAL) 2,850

  18. ==============================

    18.

    Select min(salary) from (
      select distinct(salary) from empdetails order by salary desc
    ) where rownum <=&rn
    

    그냥 당신이 원하는 n 번째 번호를 입력합니다.

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

    19.이 시도:

    이 시도:

    SELECT min(sal)  FROM (
    SELECT sal FROM emp ORDER BY sal desc) WHERE ROWNUM <= 3; -- Replace 3 with any value of N
    
  20. ==============================

    20.당신은 DENSE_RANK () 함수를 사용하여 쿼리를 최적화 할 수 있습니다.

    당신은 DENSE_RANK () 함수를 사용하여 쿼리를 최적화 할 수 있습니다.

    예를 들어 :

    구별 급여를 선택   (선택한 급여 DENSE_RANK () 급여하여 위에 DESC (순서) 랭킹     직원에서   )   순위 = 6

    참고 : 6 순위하는 n 차의 수입니다.

  21. ==============================

    21.

    SELECT Min(sal)
    FROM   (SELECT DISTINCT sal
            FROM   emp
            WHERE  sal IS NOT NULL
            ORDER  BY sal DESC)
    WHERE  rownum <= n;  
    
  22. ==============================

    22.

    select * from (select rownum as rownumber,emp1.* from (select * from emp order by sal desc) emp1) where rownumber = 3;
    
  23. ==============================

    23.5 가장 높은 연봉 :

    5 가장 높은 연봉 :

    SELECT
        * 
    FROM
        emp a 
    WHERE 
        4 = (
            SELECT 
                COUNT(DISTINCT b.sal) 
            FROM 
                emp b 
            WHERE 
                a.sal < b.sal
        )
    

    N. 임의의 값으로 교체 4

  24. ==============================

    24.세 가지 방법이 있습니다 있습니다 ...

    세 가지 방법이 있습니다 있습니다 ...

    SELECT salary,first_name,rnk 
    FROM (SELECT salary,first_name,rank() over (order by salary desc nulls last) as                                                                  rnk from emp) where rnk=3;
    
    
    SELECT salary,first_name,rnk 
    FROM (SELECT salary,first_name,dense_rank() over (order by salary desc nulls last) as                                                                  rnk from emp) where rnk=3;
    
    
    select rnk,first_name,salary 
    from (select rownum as rnk ,first_name,salary 
          from (select first_name,salary 
                from emp order by salary desc nulls last)) where rnk=3
    
  25. from https://stackoverflow.com/questions/20091125/nth-max-salary-in-oracle by cc-by-sa and MIT license