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명 밖에 없다는 가정하에 결과는 똑같이 나온다.