본문 바로가기
SQL

[solvesql - day 18] 펭귄 날개와 몸무게의 상관 계수

by 우솨 2025. 1. 11.

https://solvesql.com/problems/correlation-penguin/

 

https://solvesql.com/problems/correlation-penguin/

 

solvesql.com

-- 펭귄 데이터에서 종별로
-- 날개 길이와 몸무게 사이의 상관계수(Correlation Coefficient)를 계산

WITH avg_peng AS (
    -- 각 펭귄의 종별 평균 날개 길이와 평균 몸무게를 계산한 임시 테이블
    SELECT 
        species,                -- 펭귄의 종 (예: Adelie, Chinstrap, Gentoo)
        flipper_length_mm,      -- 날개 길이(mm)
        AVG(flipper_length_mm) OVER (PARTITION BY species) AS avg_fli, -- 종별 평균 날개 길이
        body_mass_g,            -- 몸무게(g)
        AVG(body_mass_g) OVER (PARTITION BY species) AS avg_bm         -- 종별 평균 몸무게
    FROM 
        penguins                -- 펭귄 데이터 테이블
)

-- 상관계수 계산
SELECT 
    species,                   -- 펭귄의 종
    ROUND(
        -- 상관계수 계산 공식
        SUM((flipper_length_mm - avg_fli) * (body_mass_g - avg_bm)) / -- 공분산
        SQRT(SUM(POWER(flipper_length_mm - avg_fli, 2))) /           -- 날개 길이 분산의 제곱근
        SQRT(SUM(POWER(body_mass_g - avg_bm, 2))),                   -- 몸무게 분산의 제곱근
        3 -- 소수점 3자리로 반올림
    ) AS corr                  -- 날개 길이와 몸무게 간의 상관계수
FROM 
    avg_peng                  -- 계산된 임시 테이블을 기반으로 작업
GROUP BY 
    species                   -- 종별로 상관계수 계산