-
[PostgreSQL] PERCENTILE_CONT 함수를 이용한 중앙값 계산공부/Database 2025. 5. 6. 22:53
업무를 하다 보면 여러 가지 값이 필요로 하는 상황이 생기게 됩니다.
그중에서 통계적으로 중앙값을 필요로 하는 부분이 있습니다.
중앙값을 구할 때 다양한 방법이 있을 수 있지만 PostgreSQL을 사용하고 있다면 Percentile_cont라는 함수를 이용하는 방법을 말씀드리도록 하겠습니다.
중앙값의 정의를 어떻게 하느냐에 따라 다를 거 같습니다.
ex. A라는 배열에 정렬된 숫자가 있다고 가정하도록 하겠습니다.
1. A[0] + A [A.length-1] / 2 = (최소 + 최대/2)
2. 정렬된 숫자의 길이/2 = (A의 중간값)
조건들이 있을 수 있지만 Percentile_cont는 위 조건과는 다르게 계산됩니다.Percentile_cont
정렬된 값들 사이를 선형 보간(linear interpolation)해서 백분위수 값을 계산합니다.
선형보간이란? (wiki)
끝점의 값이 주어졌을 때 그 사이에 위치한 값을 추정하기 위하여 직선거리에 따라 선형적으로 계산하는 방법이다.
1. row(데이터)가 짝수인 경우
- 가운데 두 값을 구합니다.
ex. 총 6개의 row가 있다면 n=6/2=3, 가운데 값은 A[2](n-1),A[3](n)을 선형 보간합니다.
- (A [2] + A [3])/2를 한 값이 중앙값이 됩니다.
짝수 예시
/** row = [ { id:1, num:10 }, { id:2, num:20 }, { id:3, num:30 }, { id:4, num:40 }, { id:5, num:50 }, { id:6, num:60 } ] */ SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY num) FROM TableName;- 중앙값을 알기 위해서 percentile_cont 함수에 0.5를 넣어주셔야 합니다.
- 값이 6개임으로 짝수이며 가운데 두 값인 30과 40으로 계산해야 합니다.
- (30+40)/2=35
- 중앙값은 35가 됩니다.
2. row(데이터)가 홀수인 경우
- 가운데 값을 그대로 반환합니다.
ex. 총 5개의 row가 있다면 n=5/2 = 2, 가운데 값은 A [2]입니다.
홀수 예시
/** row = [ { id:1, num:10 }, { id:2, num:20 }, { id:3, num:30 }, { id:4, num:40 }, { id:5, num:50 } ] */ SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY num) FROM TableName;- 중앙값을 알기 위해서 percentile_cont 함수에 0.5를 넣어주셔야 합니다.
- 그러면 중앙값으로 30이 출력이 됩니다.
percentile_cont 말고 percentile_disc도 있지만, disc는 정렬된 값을 기준으로 선형보간이 이루어지지 않은 값을 전달한다고 합니다.
선형 보간을 이루지 않은 값이라고 하면 데이터가 짝수인 경우라면 절반 한 값의 제일 큰 값을 가져온다고 보시면 됩니다.
데이터를 기반으로 있는 값을 중앙값으로 하신다고 하면 disc라고 생각하며, 정확한 값을 도출한다면 cont일 거 같습니다.
그리고 제일 중요한 부분
공식문서를 확인하면 PostgreSQL 버전 9.4 이상부터 지원하는 함수입니다.
이전 버전을 사용하시는 분이라면 다른 방식을 고려해 보셔야 될 거습니다.
특정 문제나 궁금한 점을 검색하며 찾아보고 작성한 글입니다. 혹시라도 부정확한 정보를 전달드릴 수 있습니다. 틀린 부분이 있으면 댓글을 남겨주세요.
Ref.
https://datarian.io/blog/calculating-median-with-postgresql-percentile-cont-function
PERCENTILE_CONT 함수를 이용해 중앙값 계산하기 [PostgreSQL]
PostgreSQL의 PERCENTILE_CONT 함수를 이용해 중앙값을 계산해봅시다. PERCENTILE_CONT 함수와 PERCENTILE_DISC 함수의 차이점도 알아봅시다.
datarian.io
https://www.postgresql.org/docs/9.4/sql-expressions.html
Value Expressions
Value expressions are used in a variety of contexts, such as in the target list of the SELECT command, as new column values in INSERT or UPDATE, or in search conditions in a number of commands. The result of a value expression is sometimes called a scalar,
www.postgresql.org
'공부 > Database' 카테고리의 다른 글
[SQL] FK를 이용하여 여러 Row data를 컬럼과 값으로 Group by 하려면..... (0) 2024.02.27 반복 일정 설계 (0) 2023.07.03 MongoDB - 배열 식별자를 통한 다중 update(feat.arrayFilters) (0) 2022.10.24 ORM(Object Relational Mapping) (0) 2021.12.24 MySQL 데이터 추가, 수정, 삭제 (0) 2021.09.01