학습 자료

PARTITION BY

PARTITION BY 절은 윈도 함수와 함께 사용되어 행을 그룹으로 나눠, 각 그룹을 서로 독립적으로 처리할 수 있게 합니다.

GROUP BY와 비슷하게 동작하지만, GROUP BY와 달리 행을 하나로 축약하지 않습니다. 모든 행을 그대로 유지한 채 윈도 함수 계산을 위해 논리적으로만 구분합니다.


Syntax

PARTITION BY를 사용해 행을 파티션(그룹)으로 나눌 수 있습니다.

PARTITION BY 문법
SELECT column, window_function(...) OVER ( PARTITION BY group_column ORDER BY sort_column ) AS result FROM table;
  • PARTITION BY는 행을 그룹으로 분할합니다.
  • ORDER BY는 각 그룹 내에서 행을 정렬합니다.

Example: 반별 학생 순위 매기기

다음과 같은 테이블이 있다고 가정해 봅시다.

scores

nameclassscore
AlexA92
SaraA95
DanielA88
MiaB90
JohnB85
EmmaB93

각 반에서 점수가 높은 순서대로 학생의 순위를 매기고 싶습니다.

PARTITION BY 사용 예
SELECT name, class, score, RANK() OVER ( PARTITION BY class ORDER BY score DESC ) AS rank_in_class FROM scores;

쿼리 결과는 다음과 같습니다.

결과:

nameclassscorerank_in_class
SaraA951
AlexA922
DanielA883
EmmaB931
MiaB902
JohnB853

여기서는 PARTITION BY class 덕분에 각 반마다 독립적인 순위가 매겨집니다.


일반적으로 PARTITION BY는 행을 그룹으로 나눠, 윈도 함수가 전체 테이블이 아닌 각 그룹 내부에서 결과를 계산하도록 합니다.

Quiz
0 / 1

SQL에서 RANK()와 DENSE_RANK() 함수의 주요 차이는 무엇인가요?

RANK()는 동일한 값의 모든 행에 같은 순위를 부여하고, 다음 순위를 건너뜁니다.

DENSE_RANK()는 값과 상관없이 모든 행에 서로 다른 순위를 부여합니다.

RANK()는 값이 같아도 각 행에 고유한 순위를 부여합니다.

DENSE_RANK()는 동일한 값을 만나면 순위를 건너뜁니다.

학습 자료

AI 튜터

디자인

업로드

수업 노트

즐겨찾기

도움말

코드 에디터

코드 실행
코드 생성

DB 테이블 구조

실행 결과