• Home
  • About
    • 최정재 photo

      최정재

      창의적인 시각으로 다양한 가능성을 탐색하는 개발의 모험가

    • Learn More
    • Email
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

[SQLD] TOP N 쿼리

24 Feb 2024

Reading time ~1 minute

TOP N 쿼리

상위 N개의 데이터를 추출하는 쿼리.

1. ORACLE

ROWNUM

-ORACLE에서 가져오고자 하는 행수를 제한할 때 ROWNUM < 3 과 같은 방식으로 사용 가능.
-WHERE 절과 ORDER BY를 같이 쓰면 WHERE이 우선이기에 순서를 정렬하고
ROWNUM으로 데이터를 가져오고 싶다면 INLINE VIEW로 처리한 후 ROWNUM으로 데이터를 가져오면 된다.

SELECT ENAME, SAL
    FROM (SELCT ENAME, SAL 
            FROM EMP
            ORDER BY SAL DESC)
    WHERE ROWNUM <=3;

결과 SAL 내림차순으로 상위 3명 출력

ENAME SAL
최정재 5000
최은재 3000
오윤석 2000

2. SQL SERVER

TOP 절

TOP(N) 쿼리는 SELECT 절에 있지만 처리 순서는 SELECT - ORDER BY- TOP(N) 쿼리 순으로 진행되기에 먼저 정렬 후 상위 데이터를 추출 할 수 있다.

TOP(N) WITH TIES를 활용하여 동일 수치의 데이터는 추가로 더 추출 할 수 있다.

SELECT TOP(3) WITH TIES ENAME, SAL
    FROM EMP
    ORDER BY SAL DESC;

결과 WITH TIES를 붙여 동일 수치 데이터도 같이 출력

ENAME SAL
최정재 5000
최은재 3000
오윤석 2000
김성광 2000
이경찬 2000

WITH TIES가 없다면 오윤석까지 하고 컽.

3. ANSI 표준 SQL 문법(ORACLE & SQL SERVER 공통)

ROW LIMITING 절

ORDER BY 절 다음에 위치하며 실행은 ORDER BY 절과 함께 실행된다.

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

OFFSET N : 건너뛸 행의 개수를 지정
FETCH : 반환할 행의 개수 또는 백분율 지정
ONLY : 지어된 행의 개수나 백분율만큼만 행을 반환
WITH TIES : 마지막 행에 대한 동순위 포함해서 반환
SELECT ENAME, SAL
    FROM EMP
    ORDER BY SAL DESC
    FETCH FIRST 5 ROWS ONLY;

결과

ENAME SAL
최정재 5000
최은재 3000
오윤석 2000
김성광 2000
이경찬 2000
SELECT ENAME, SAL
    FROM EMP
    ORDER BY SAL DESC
    FETCH FIRST 3 ROWS WITH TIES;

with ties를 이용하여 마지막 행에 대한 동순위를 출력하기 때문에
2000이 3명 밖에 없다는 가정하에 결과는 똑같이 나온다.



SQLD Share Tweet +1