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