SQLD/SQL 기본과 활용

SQL) Top N 쿼리

DevPing9_ 2020. 9. 1. 16:35

# Top N 쿼리 : 상위 n개의 데이터를 추출하는 쿼리

 

 1. Oracle

  # ROWNUM  Pseudo Column

   - WHERE 절에서 행의 갯수를 제한

   - WHERE과 ORDER BY를 같이 쓰면 WHERE가 먼저 순서이므로, 무작위 데이터3개 중 정렬된 데이터가 출력됨. 

     (상위 몇개를 뽑는 Top N 쿼리가 아님)

   - ROWNUM으로 Top N 쿼리를 만드려면 인라인뷰로 처리할 것

 

SQL> SELECT ENAME, SAL
     FROM (SELECT ENAME,SAL FROM EMP
           ORDER BY SAL DESC)
     WHERE ROWNUM <=3;
# 실행결과 (EMP 테이블의 봉급 상위 3명)
ENAME             SAL
----------------------
John                4000
Keya                3000
Hodor              2500

 

2. SQL Server

  # TOP 절

   - SELECT 절에 있어 ORDER BY 후 상위 N개를 뽑아내기 때문에 ORDER BY와 함께 Top N 쿼리 기능 수행 가능

     (ORDER BY를 안쓴다면 Oracle과 동일하게 입력된 데이터순서의 상위3개를 가져옴)

 

# Syntax
TOP (N) [PERCENT] [WITH TIES]


SQL Server> SELECT TOP(3)
                   [PERCENT]        # 키워드 없을시 탑2개, 키워드 있을시 탑 2퍼센트 데이터 출력
                   [WITH TIES]      # 동일 수치의 데이터는 추가 출력 (마지막데이터에 동일데이터가 있을시)
                   ENAME, SAL
            FROM EMP
            ORDER BY SAL DESC;
# 실행결과
ENAME           SAL
-----------------------
KoB             5000
NoW             5000
GeT             3000 # 아무키워드 없이 TOP(3) 일 경우 출력 결과
=======================
NoT             3000 
CaN             3000 # WITH TIES 키워드 삽입시 출력결과

 

 3. ANSI 표준 SQL 문법 (Oracle & SQL Server 공통)

   # ROW LIMITING 절

    - 위치는 ORDER BY 절 다음 (실행은 ORDER BY절과 함께 실행)

    - ROW와 ROWS 키워드는 구분하지 않아도 됨

# Syntax

[OFFSET N {ROW | ROWS}]
[FETCH {FIRST | NEXT}
 [{rowcount | percent PERCENT}]
 {ROW | ROWS} {ONLY | WITH TIES}
]

OFFSET N : 건너뛸 행의 개수를 지정
FETCH : 반환할 행의 개수 또는 백분율 지정
ONLY : 지어된 행의 개수나 백분율만큼만 행을 반환
WITH TIES : 마지막 행에 대한 동순위 포함해서 반환
SQL Server & Oracle> 
SELECT ENAME, SAL
FROM EMP
ORDER BY SAL DESC
FETCH FIRST 5 ROWS ONLY;
# 실행결과
ENAME           SAL
-----------------------
KoB             5000
NoW             5000
GeT             3000
NoT             3000 
CaN             3000 

 

728x90