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
name | class | score |
---|---|---|
Alex | A | 92 |
Sara | A | 95 |
Daniel | A | 88 |
Mia | B | 90 |
John | B | 85 |
Emma | B | 93 |
각 반에서 점수가 높은 순서대로 학생의 순위를 매기고 싶습니다.
PARTITION BY 사용 예
SELECT name, class, score, RANK() OVER ( PARTITION BY class ORDER BY score DESC ) AS rank_in_class FROM scores;
쿼리 결과는 다음과 같습니다.
결과:
name | class | score | rank_in_class |
---|---|---|---|
Sara | A | 95 | 1 |
Alex | A | 92 | 2 |
Daniel | A | 88 | 3 |
Emma | B | 93 | 1 |
Mia | B | 90 | 2 |
John | B | 85 | 3 |
여기서는 PARTITION BY class
덕분에 각 반마다 독립적인 순위가 매겨집니다.
일반적으로 PARTITION BY
는 행을 그룹으로 나눠, 윈도 함수가 전체 테이블이 아닌 각 그룹 내부에서 결과를 계산하도록 합니다.
Quiz
0 / 1
SQL에서 RANK()와 DENSE_RANK() 함수의 주요 차이는 무엇인가요?
RANK()는 동일한 값의 모든 행에 같은 순위를 부여하고, 다음 순위를 건너뜁니다.
DENSE_RANK()는 값과 상관없이 모든 행에 서로 다른 순위를 부여합니다.
RANK()는 값이 같아도 각 행에 고유한 순위를 부여합니다.
DENSE_RANK()는 동일한 값을 만나면 순위를 건너뜁니다.
학습 자료
AI 튜터
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
코드 실행
코드 생성
DB 테이블 구조
실행 결과