CS/sql

[MSSQL] Partition by 사용방법, 특정 열 기준에서 순위 표현

isaac.kim 2022. 6. 18.
728x90
반응형

[MSSQL] Partition by 사용방법, 특정 열 기준에서 순위 표현

 

Partition by는 데이터의 집합(테이블)에서 어떤 항목을 기준으로 테이블을 분리하여 순위나 순서를 나타낼 때 사용할 수 있다. 테이블의 어떤 항목(열, Column)을 기준으로 분리하여 표현할 때 많이 사용된다.

 

반응형

 

임시 데이터로 테스트해보자.

 

SELECT * FROM (
	SELECT 'A' as class, '손홍만' AS NAME, 100 AS SCORE 
	UNION ALL
	SELECT 'B' as class, '황위조' AS NAME, 95 AS SCORE 
	UNION ALL
	SELECT 'A' as class, '정우엉' AS NAME, 90 AS SCORE 
	UNION ALL
	SELECT 'B' as class, '청철' AS NAME, 93 AS SCORE 
	UNION ALL
	SELECT 'A' as class, '이영' AS NAME, 96 AS SCORE 
) AS T

 

 

먼저 특정 데이터를 기준으로 테이블을 분리하지 않고, 점수 순서 별로 학생들을 출력한다고 해보자.

그리고 학생들의 순위(순서)도 함께 확인해보자.

SELECT 
	*,
	row_number() over (order by score desc) as 'row'
FROM (
	SELECT 'A' as class, '손홍만' AS NAME, 100 AS SCORE 
	UNION ALL
	SELECT 'B' as class, '황위조' AS NAME, 95 AS SCORE 
	UNION ALL
	SELECT 'A' as class, '정우엉' AS NAME, 90 AS SCORE 
	UNION ALL
	SELECT 'B' as class, '청철' AS NAME, 93 AS SCORE 
	UNION ALL
	SELECT 'A' as class, '이영' AS NAME, 96 AS SCORE 
) AS T

 

위 SQL에서 row_number() over (order by score desc) as 'row' 이 구문이 순위를 구할 수 있게 해 주었다.

1등은 100점을 맞은 '손홍만', 2등은 96점을 맞은 '이영', 3등은 95점을 맞은 '황위조'다.

 

그런데, 보통 평가는 같은 반에서 이루어진다고 본다면 '황위조' 학생은 B class에서 1등이 되어야 한다.

이때 partition by를 사용해 class를 구분해줄 수 있다.

 

같은 class에서 순위를 정하는 SQL은 다음과 같다.

SELECT 
	*,
	row_number() over (partition by class order by score desc) as 'row'
FROM (
	SELECT 'A' as class, '손홍만' AS NAME, 100 AS SCORE 
	UNION ALL
	SELECT 'B' as class, '황위조' AS NAME, 95 AS SCORE 
	UNION ALL
	SELECT 'A' as class, '정우엉' AS NAME, 90 AS SCORE 
	UNION ALL
	SELECT 'B' as class, '청철' AS NAME, 93 AS SCORE 
	UNION ALL
	SELECT 'A' as class, '이영' AS NAME, 96 AS SCORE 
) AS T

partition by 구문이 추가되어서, class를 구분으로 나누고 그 안에서 순위를 정하여 표현한다.

 

 

맨 위에서 설명했던 내용을 다시 가져와보면,

 

Partition by는 데이터의 집합(테이블)에서 어떤 항목을 기준으로 테이블을 분리하여 순위나 순서를 나타낼 때 사용할 수 있다. 테이블의 어떤 항목(열, Column)을 기준으로 분리하여 표현할 때 많이 사용된다.

 

위 케이스에 그대로 대입하면,

 

Partition by테이블 T 에서 Column Name class 기준으로 테이블 T를 분리하여 순위나 순서(row)를 나타낼 때 사용할 수 있다. 테이블 Tclass(열, Column)를 기준으로 분리하여 순위를 표현할 때 사용된다.


오늘은 '[MSSQL] Partition by 사용방법, 특정 열 기준에서 순위 표현'에 대해 알아보았습니다.

 

좋아요, 구독, 광고 클릭은 큰 힘이 됩니다 :)

728x90
반응형