데이터 처리 도구/SQL 연습 기록

DAY 8 / [solvesql] Advent of SQL 2024 (펭귄 날개와 몸무게의 상관 계수)

yourhm 2025. 5. 21. 10:13

펭귄 날개와 몸무게의 상관 계수

먼저, 피어슨 상관계수란? 일명 표본 상관계수(Correlation Coefficient). 두 수치형 변수의 선형관계의 정도를 파악할 수 있다. 피어슨 상관계수를 구하는 식은 아래와 같다.

 

피어슨 상관계수를 구하는 내장 함수 존재 여부는 DBMS에 따라 다르기 때문에, 작성 쿼리도 다르게 작성해야 한다.

 

 

▶️PostgreSQL

SELECT species
     , ROUND(CAST(CORR(flipper_length_mm, body_mass_g) AS NUMERIC), 3) AS "corr"
FROM penguins
GROUP BY species

 

PostgreSQL에서는 CORR() 함수를 이용하여 쉽게 피어슨 상관계수를 구할 수 있다. 단, 반올림을 하기위해 ROUND()를 씌워주려면 먼저 타입 캐스트(변환)를 꼭 해줘야 한다. 왜냐하면

 

👉 PostgreSQL의 ROUND() 함수는 아래처럼 여러 오버로드(overload) 버전을 가지고 있는데, 원하는 소수점 자리수로 반올림하려면 numeric 타입만 입력받도록 정의되어 있다.

 

ROUND(double precision)  double precision 타입을 입력받아 가장 가까운 정수로 반올림
ROUND(numeric) numeric 타입을 입력받아 가장 가까운 정수로 반올림
ROUND(numeric, integer) ✔️ numeric 타입을 입력받고, 두 번째 인자로 지정된 소수점 자리수(integer)로 반올림

 

👉 그러나 PostgreSQL의 CORR() 함수는 상관계수를 계산하여 double precision (부동 소수점 숫자) 타입의 결과를 반환한다.따라서 CORR() 함수로 구한 값을 double precision → numeric 으로 타입을 변환해야 한다. 타입 변환은 CAST() 함수를 통해 작성할 수 있다. 포맷은 CAST(value AS NUMERIC) 이렇게 된다.

 

 

 

 

▶️ MySQL

 

MySQL에는 피어슨 상관계수를 구하는 내장함수가 존재하지 않는다. 따라서 이를 구하기 위해서는 쿼리로 계산 식을 작성해야 한다.