PARTITION by 는 그룹별 집계 또는 순위를 구할 때 사용가능 하다.
PARTITION(파티션) 말 그대로 구획을 정해 구회별로 통계, 집계하기 위해 사용한다.
예를 들어
select 문에서 사용방법
1) 통계함수 사용시
select 통계함수 over ( PARTITION by [구획 컬럼명] order by [순서 기준 컬럼명] 차순 ) from [테이블]
ex) select name, city , rank() over(partition by city order by age desc ) from [People]
[People] 테이이블의 사람들의 성명, 도시, 순위(도시별로 해당 도시에서 나이 많은 순으로 )
반면에 PARTITION by을 빼면
ex) select name, city , rank() over( order by age desc ) from [People]
[People] 테이이블의 사람들의 성명, 도시, 순위( 전국구로 나이 많은 순으로 )
2) 집계함수 사용시
select 집계함수 over ( PARTITION by [구획 컬럼명] ) from [테이블]
ex) select name , city, count(*) over( partition by city ) from [People]
[People] 테이이블의 사람들의 성명, 도시 , 해당 도시의 인구
집계함수 사용하는 것은 group by 사용할 때와 비슷해 보이는데...
group by 사용할 때와 차이는 무었인가?
group by 는 그룹을 묶어서 해당 그룹별로 대한 집계 함수 결과값을 보여줄 수 있다.
단, PARTITION by 와 다르게 테이블의 모든 행에 대하여 출력하지 않는다.
집계함수에 관련된 것만 보여출력 할 수 있다. 해당 그룹과 , 그 그룹의 집계만 출력 한다.
ex) select name , city, count(*) from [People] group by city
'[People].name'이(가) 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다.
라고 오류 메시지가 나올 것이다.
반면 , PARTITION by 는 테이블의 모든 컬럼과 행에 집계함수 값을 함께 출력이 가능하다.
사용자가 단순히 그룹별 집계 결과만 보고 싶으면 group by
기존의 테이블의 모든 행에 대해서 집계 결과를 곁들여서 함께 보고 싶으면 PARTITION by
'MSSQL' 카테고리의 다른 글
[MSSQL] 트랜잭션의 격리 수준(isolation) (0) | 2022.02.18 |
---|---|
[MSSQL] WITH(NOLOCK) 사용 (0) | 2022.02.18 |
[MSSQL] 숫자 ->문자 / 문자 ->숫자 변환 ( Convert / Cast ) (0) | 2022.02.09 |
[MSSQL] UNION 과 UNION ALL 차이 (0) | 2022.02.07 |
[MSSQL] UNION 과 UNION ALL 차이 (0) | 2022.02.07 |