반응형
테이블 분할 함수 PARTITION에 대해 알아보자
PARTITION 함수
그룹 내 순위 및 그룹 별 집계를 구할 때 유용하게 사용할 수 있다.
SELECT 순위함수() OVER(PARTITION BY 컬럼명 ORDER BY 컬럼명)
FROM 테이블명
SELECT 집계함수(컬럼명) OVER (PARTITION BY 컬럼명)
FROM 테이블명
순위함수
- ROW_NUMBER
- RANK
- DENSE_RANK
[MSSQL] ROW_NUMBER, RANK, DENSE_RANK 순위함수
집계함수
- SUM(합계)
- AVG(평균)
- MAX, MIN(최대, 최소)
- COUNT(개수)
예제1. 학생들의 등수 매기기
다음과 같은 데이터가 있을때, 이 학생들의 등수를 매기려고 한다.
순위함수인 ROW_NUMBER를 이용하면 쉽게 등수를 매길 수 있다.
SELECT *, ROW_NUMBER() OVER(ORDER BY Score DESC) 'Row'
FROM TABLE_A
예제2. 학생들의 반별 등수 매기기
하지만, 이 학생들은 모두 같은반(Class)이 아닌 'A', 'B' 반으로 구분되어 있다.
통째로가 아니라 각 반 내에서의 등수를 매기고 싶다!
이때 바로 PARTITION으로 반을 분할하고 등수를 매기면된다.
SELECT *, ROW_NUMBER() OVER(PARTITION BY Class ORDER BY Score DESC) 'P_Row'
FROM TABLE_A
예제2. 반별 총 점수
해당 학생이 해당하는 반의 총 점수를 계산해보자
SELECT *, SUM(Score) OVER(PARTITION BY Class) AS 'C_Sum'
FROM TABLE_A
반응형
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] 조건절 LIKE 검색 조건 (ESCAPE 특수문자 와일드 카드 (예약어) 검색) (0) | 2017.02.13 |
---|---|
[MSSQL] PIVOT, UNPIVOT (행렬 변환) (6) | 2017.02.10 |
[MSSQL] DATENAME, DATEPART (요일, 올해 몇번째 날, 주말을 제외한 평일 일수) (0) | 2017.02.09 |
[MSSQL] COMPUTE (별도의 결과 집합으로 출력) (0) | 2016.07.11 |
[MSSQL] ROLLUP (소계, 합계) (0) | 2016.07.11 |