복붙노트

[SQL] 오라클 SQL - 열의 최대 5 개 값을 검색하는 방법

SQL

오라클 SQL - 열의 최대 5 개 값을 검색하는 방법

당신은 어떻게 행만을 선택 번호 중 가장 높은 또는 가장 낮은 열 값을 반환하는 쿼리를 작성하려면 어떻게해야합니까.

5 명 가장 높은 급여 직원, 즉 보고서?

해결법

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

    1.이 작업을 수행하는 가장 좋은 방법은 분석 기능이며, RANK () 또는 DENSE_RANK () ...

    이 작업을 수행하는 가장 좋은 방법은 분석 기능이며, RANK () 또는 DENSE_RANK () ...

    SQL> select * from (
      2        select empno
      3               , sal
      4               , rank() over (order by sal desc) as rnk
      5        from emp)
      6  where rnk <= 5
      7  /
    
         EMPNO        SAL        RNK
    ---------- ---------- ----------
          7839       5000          1
          7788       3000          2
          7902       3000          2
          7566       2975          4
          8083       2850          5
          7698       2850          5
    
    6 rows selected.
    
    SQL>
    

    동점이있을 때 DENSE_RANK ()는 간극을 압축 :

    SQL> select * from (
      2        select empno
      3               , sal
      4               , dense_rank() over (order by sal desc) as rnk
      5        from emp)
      6  where rnk <= 5
      7  /
    
         EMPNO        SAL        RNK
    ---------- ---------- ----------
          7839       5000          1
          7788       3000          2
          7902       3000          2
          7566       2975          3
          8083       2850          4
          7698       2850          4
          8070       2500          5
    
    7 rows selected.
    
    SQL>
    

    어떤 행동을 당신이 선호하는 귀하의 비즈니스 요구 사항에 따라 달라집니다.

    우리가 행의 정확한 수를 반환하는 데 사용할 수있는 ROW_NUMBER () 분석 함수도 있습니다. 그러나, 우리는 비즈니스 로직 임의로 넥타이의 경우에 결과 집합을 절단하는 행복하지 않으면 행 번호를 기반으로 솔루션을 사용하지 않아야합니다. 높은 값으로 분류 다섯 개 가장 높은 값을 요구하고 처음 다섯 개 기록 차이가 있습니다

    ROWNUM 의사 열을 사용하여 비 분석 솔루션도 있습니다. ROWNUM은 예기치 않은 결과로 이어질 수 ORDER BY 절, 전에 적용되기 때문 어설픈입니다. 사용하는 대신 ROW_NUMBER의 ROWNUM () 또는 순위 기능 중 하나에 대한 이유는 거의 없다.

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

    2.이거 한번 해봐:

    이거 한번 해봐:

    SELECT * FROM 
        (SELECT field1, field2 FROM fields order by field1 desc) 
    where rownum <= 5
    

    또한 방법 ROWNUM 작품에 대한 자세한 설명은이 자원에 봐.

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

    3.오라클 9i의 +는 분석 기능을 제공합니다 :

    오라클 9i의 +는 분석 기능을 제공합니다 :

    모두는 ROW_NUMBER / RANK / DENSE_RANK 값이 반환 적절하게 조정 BY 절 PARTITION BY와 ORDER를 허용 OVER 절의 사용을 필요로한다.

    부수적으로 빠른 ROW_NUMBER (링크)를 사용하는 것보다 - 9i의 이전에, 유일한 옵션은 ROWNUM과 함께 작업을했다.

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

    4.오라클 12C, 이것은 FETCH..FIRST ROWS..ONLY을 사용하여 달성 될 수있다

    오라클 12C, 이것은 FETCH..FIRST ROWS..ONLY을 사용하여 달성 될 수있다

    상위 5 개 가장 높은 급여를 가져 오기합니다.

     SELECT *
           FROM EMPLOYEES
       ORDER BY SALARY DESC
    FETCH FIRST 5 ROWS ONLY;
    
  5. ==============================

    5.

    Select emp_id , salary from employees
      Order by salary desc
      Limit 5;
    
  6. from https://stackoverflow.com/questions/2306744/oracle-sql-how-to-retrieve-highest-5-values-of-a-column by cc-by-sa and MIT license