-
SQL) Top N 쿼리SQLD/SQL 기본과 활용 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'SQLD > SQL 기본과 활용' 카테고리의 다른 글
Oracle SQL) 계층형 쿼리와 셀프조인 (0) 2020.09.01 SQL) WINDOW 함수(2) -그룹별 행 순서함수, 그룹별 비율함수 (0) 2020.08.31 SQL) WINDOW 함수(1) -그룹내 순위함수,일반 집계함수 (0) 2020.08.31 SQL) ROLLUP, CUBE 함수에 대한 이해와 고찰 (0) 2020.08.31 스칼라 서브쿼리(Scalar SubQuery), 인라인 뷰(Inline View), 뷰(View) (0) 2020.08.28