기본 콘텐츠로 건너뛰기

SQL PERCENT_RANK - 상대 순위 매기기

SQL의 percent_rank 함수를 사용해서 데이터의 상대 순위를 매길 수 있다.
순위를 매기는 방식은 기본적으로 rank 함수와 같다. rank 함수에 대한 설명은 "SQL RANK - 순위 매기기" 포스팅에서 자세히 확인할 수 있다.
percent_rank는 1등을 0, 마지막 등수를 1로 출력한다는 점이 rank와 다르다.

아래의 샘플 테이블을 통해 살펴보자.
1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE TABLE body (height float, _name text);

INSERT INTO body VALUES(174.52, 'Tom');
INSERT INTO body VALUES(167.33, 'Lucy');
INSERT INTO body VALUES(174.52, 'Frank');
INSERT INTO body VALUES(168.89, 'Jane');
INSERT INTO body VALUES(177.80, 'Robert');
INSERT INTO body VALUES(175.77, 'Robert');
INSERT INTO body VALUES(175.77, 'Robert');
INSERT INTO body VALUES(170.40, 'Robert');

상대 순위를 매기는 코드는 아래와 같다.

1
2
3
select percent_rank () over (partition by _name order by height desc) as percent_ranking, _name, height
from body
;

위 코드를 실행시키면 아래와 같은 결과를 얻을 수 있다.

기본 문법은 percent_rank () over (order by columns)이다. 더 자세히 살펴보자.
- order by는 상대 순위를 매기는 기준을 나타낸다. 다시말해 order by의 칼럼을 기준으로 상대 순위를 매긴다. Robert의 키가 큰 순서로 상대 순위를 매기기 위해 desc를 붙여 내림차순을 해주었다. desc가 없으면 오름차순으로 상대 순위를 매긴다.
- 상대 순위는 1등은 0, 마지막 등수는 1로 표시된다.
- partition by는 파티션(그룹)을 만들어서 상대 순위를 매긴다. partition by _name이므로 _name을 기준으로 파티션을 만들어서 파티션 안에서 order by로 상대 순위를 매긴다. _name으로 파티션을 만들었으므로 _name이 다른 행들은 모두 1등이 되어 출력 값은 0이고, Robert는 4개의 데이터로 순위가 매겨졌다. partition by가 없다면 전체 행을 order by 기준으로 상대 순위를 매긴다.

- Robert의 순위를 살펴보자. 데이터는 4개이다. 1등은 0으로 출력되고 마지막 등수는 2로 출력된다. 그러면 나머지 2개가 0과 1 사이에서 균등한 소수점으로 배분된다. 2개의 데이터가 0과 1를 3등분하여, 2등은 0.33으로 3등은 0.66으로 등수가 매겨지게 된다. 하지만 위 예시는 동점이 생겨서 2등인 0.33만 출력되었다.

- Robert의 동점을 살펴보자. 동점은 같은 순위를 매긴다. 그리고 동점이 생긴 만큼 그 다음 등수는 뒤로 밀린다. rank함수와 같다.

끝.

댓글

이 블로그의 인기 게시물

웨딩 드레스 스케치 도안

웨딩 드레스샵 투어를 다니면서 샘플로 드레스를 입는 경우에는 드레스 사진을 찍지 못하게 하는 샵이 많다. ​ 그래서 투어를 돌고 나면 어떤 샵의 어떤 스타일이 신부에게 잘 어울렸는지 헷갈릴 수가 있다. ​ 하지만 투어를 다닐 때 드레스샵에서 입은 드레스의 특징과 느낌을 잘 기록하면 샵을 선택하는 데 도움이 될 수 있다. ​ 드레스 투어를 다닐 때 드레스를 기록할 스케치 도안은 아래 링크에서 확인/다운로드 할 수 있다. 웨딩 드레스 스케치 도안 확인/다운로드 하기 투어를 마친 후 드레스샵과 계약을 하고, 드디어 본식 드레스를 고를 때에는 사진을 찍을 수 있는 경우가 많다. ​ 이 땐 사진을 잘 찍어서 어떤 드레스를 입을지 잘 선택하도록 하자. ​ ​

파이썬(Python)을 이용한 선형 회귀분석(linear regression)

파이썬의 statsmodels 라이브러리를 이용해 간단하게 선형 회귀분석을 해볼 수 있다. 예시를 통해 살펴보자. 먼저 아래와 같이 예시 데이터프레임을 만든다. 1 2 3 4 5 6 7 8 9 10 11 12 import pandas as pd height = [ 170 , 168 , 177 , 181 , 172 , 171 , 169 , 175 , 174 , 178 , 170 , 167 , 177 , 182 , 173 , 171 , 170 , 179 , 175 , 177 , 186 , 166 , 183 , 168 ] weight = [ 70 , 66 , 73 , 77 , 74 , 73 , 69 , 79 , 77 , 80 , 74 , 68 , 71 , 76 , 78 , 72 , 68 , 79 , 77 , 81 , 84 , 73 , 78 , 69 ] body = pd . DataFrame( { 'height' : height, 'weight' : weight } ) body . tail() 위 코드에 대한 설명은 "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기" 포스팅을 통해 확인할 수 있다. 위 코드를 Jupyter Notebook을 통해 실행해보면 아래와 같이 데이터 프레임이 만들어진 것을 확인할 수 있다. 선형 회귀분석은 아래와 같은 가정을 만족해야 한다. 선형 회귀분석을 할 때에는 데이터가 아래의 가정을 따르는지 먼저 생각해보는 습관을 기르자. - 변수의 선형 상관관계 : 선형 회귀분석은 종속변수(Y)와 독립변수(X)가 선형의 상관 관계를 가지는 것을 가정한다. 선형의 상관관계가 아닐 경우, 다른 회귀분석 방법을 사용하거나, 새로운 변수를 추가하거나, 기존의 변수를 로그, 지수등의 방법으...

서울대 연구공원 웨딩홀 약도

서울대학교 연구공원 웨딩홀 약도 3종 다운로드하기 ----------------------------------------- ----------------------------------------- ----------------------------------------- 끝.