[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - TOP N QUERY
TOP N QUERY
- 페이징 처리를 효과적으로 수행하기 위해 사용
- 전체 결과에서 특정 N개 추출
- ex) 성적 상위자 3명
TOP-N 행 추출 방
- ROWNUM
- RANK
- FETCH
ROWNUM
- 출력된 데이터 기준으로 행 번호 부여
- 절대적인 행 번호가 아닌 가상의 번호이므로 특정 행을 지정할 수 없음(=연산 불가)
- 첫 번째 행이 증가한 이후 할당되므로 ‘>’ 연산 사용 불가 (0은 가능) ← >= 또는 <= 사용 가능
ex) ROWNUM을 출력 형태
SELECT ROWNUM, EMP.*
FROM EMP
WHERE SAL >= 1500;
ex) ORDER BY를 사용한 예
SELECT *
FROM (SELECT *
FROM EMP
ORDER BY SAL DESC)
WHERE ROWNUM <= 5
ORDER BY SAL DESC;
→ 즉 ROWNUM이 결정되기 전에 먼저 데이터 정렬순서를 바꿔놓는 방
ex) EMP 테이블에서 급여가 높은 순서대로 4~6번째 해당하는 직원 정보 출력
SELECT *
FROM (SELECT ROWNUM AS RN, A.*
FROM (SELECT *
FROM EMP
ORDER BY SAL DESC) A) B
WHERE RN BETWEEN 4 AND 6
ORDER BY SAL DESC;
→ 서브쿼리를 통해 얻은 결과에 ROWNUM을 다시 부여하여 새로운 테이블인 것처럼 사용(인라인 뷰)
** 윈도우 함수 RANK 사용
SELECT *
FROM (SELECT EMP.*,
RANK() OVER(ORDER BY SAL DESC) AS RN
FROM EMP) A
WHERE RN BETWEEN 4 AND 6
ORDER BY SAL DESC;
FETCH 절
- 출력될 행의 수를 제한하는 절
- Oracle 12C 이상부터 제공(이전버전에는 ROWNUM 주로 사용)
- SQL Server 사용 가능
- ORDER BY 절 뒤에 사용 (내부 파싱 순서도 ORDER BY 뒤)
- 문법
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
OFFSET N { ROW | ROWS }
FETCH { FIRST | NEST } N { ROW | ROWS } ONLY
- OFFSET: 건너뛸 행의 수 ex) 성적 높은 순 1등 제외, 나머지 3명
- N: 출력할 행의 수
- FETCH: 출력할 행의 수를 전달하는 구문
- FIRST : OFFSET을 쓰지 않았을 때 처음부터 N 행 출력 명령
- NEXT : OFFSET을 사용했을 경우 제외한 행 다음부터 N행 출력 명령
- ROW | ROWS : 행의 수에 따라 하나일 경우 단수, 여러 값이면 복수형(특별히 구분하지 않아도 됨)
ex) EMP에서 SAL 순서대로 상위 5명 (19C 에서 실행)
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
ORDER BY SAL DESC FETCH FIRST 5 ROWS ONLY;
ex) EMP 테이블에서 급여가 높은 순서대로 4~6번째 해당하는 직원 정보 출력
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
ORDER BY SAL DESC
OFFSET 3 ROW
FETCH FIRST 2 ROW ONLY;
- 출력될 행의 수를 제한하는 절
- Oracle 12C 이상부터 제공(이전버전에는 ROWNUM 주로 사용)
- SQL Server 사용 가능
- ORDER BY 절 뒤에 사용 (내부 파싱 순서도 ORDER BY 뒤)
- 문법
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
OFFSET N { ROW | ROWS }
FETCH { FIRST | NEST } N { ROW | ROWS } ONLY
- OFFSET: 건너뛸 행의 수 ex) 성적 높은순 1등 제외, 나머지 3명
- N: 출력할 행의 수
- FETCH: 출력할 행의 수를 전달하는 구문
- FIRST : OFFSET을 쓰지 않았을 때 처음부터 N 행 출력 명령
- NEXT : OFFSET을 사용했을 경우 제외한 행 다음부터 N행 출력 명령
- ROW | ROWS : 행의 수에 따라 하나일 경우 단수, 여러 값이면 복수형(특별히 구분하지 않아도 됨)
ex) EMP에서 SAL 순서대로 상위 5명 (19C 에서 실행)
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
ORDER BY SAL DESC FETCH FIRST 5 ROWS ONLY;
ex) EMP 테이블에서 급여가 높은 순서대로 4~6번째 해당하는 직원 정보 출력
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
ORDER BY SAL DESC
OFFSET 3 ROW
FETCH FIRST 2 ROW ONLY;
반응형
'스터디 > SQL' 카테고리의 다른 글
[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - PIVOT 과 UNPIVOT (15) | 2024.08.31 |
---|---|
[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - 계층형 질의 (29) | 2024.08.28 |
[기출문제] 2과목(SQL기본.1) - 2024 개정판, 해설 포함 (88) | 2024.08.23 |
[정리노트] SQLD 2024년 개정판 - 윈도우 함수 (71) | 2024.08.23 |
[정리노트] SQLD 2024년 개정판 - 그룹함수 (59) | 2024.08.22 |