class="layout-aside-right paging-number">
본문 바로가기
TIL

[TIL155] solvesql - 데이터 그룹으로 묶기

by heestory323 2026. 6. 18.

문제 설명

Anscombe's Quartet 데이터는 4개의 그룹(quartet)으로 나뉘어져 있다.

각 그룹은

  • x 평균
  • x 표본분산
  • y 평균
  • y 표본분산

이 거의 동일하지만,

실제로 그래프로 그려보면 전혀 다른 분포를 가진다.


각 quartet별로

x 평균
x 표본분산
y 평균
y 표본분산

을 계산해야 한다.

또한

소수점 셋째 자리에서 반올림

해야 한다.

소수점 둘째 자리까지 출력

이다.


내가 작성한 코드

SELECT
  quartet,
  ROUND(AVG(x), 2) AS 'x_mean',
  ROUND(VARIANCE(x), 2) AS 'x_var',
  ROUND(AVG(y), 2) AS 'y_mean',
  ROUND(VARIANCE(y), 2) AS 'y_var'
FROM points
GROUP BY quartet

틀린 이유

1. VARIANCE()는 모분산

문제에서 힌트

모분산이 아니라 표본분산

이라고 명시함.


현재 사용한

VARIANCE()

는 DBMS에 따라

모분산(VAR_POP)

을 의미하는 경우가 많다.


따라서

MySQL 기준

VAR_SAMP()

사용.


표본분산 vs 모분산

모분산

공식

Σ(x - 평균)² / n

표본분산

공식

Σ(x - 평균)² / (n-1)

차이

분모가 n인지
n-1인지

정답 코드

SELECT
    quartet,
    ROUND(AVG(x), 2) AS x_mean,
    ROUND(VAR_SAMP(x), 2) AS x_var,
    ROUND(AVG(y), 2) AS y_mean,
    ROUND(VAR_SAMP(y), 2) AS y_var
FROM points
GROUP BY quartet
ORDER BY quartet;

핵심 개념

평균

AVG(x)

표본분산

VAR_SAMP(x)

모분산

VAR_POP(x)

자주 나오는 통계 함수

AVG()        -- 평균

SUM()        -- 합계

COUNT()      -- 개수

MIN()        -- 최솟값

MAX()        -- 최댓값

VAR_SAMP()   -- 표본분산

VAR_POP()    -- 모분산

STDDEV_SAMP() -- 표본표준편차

STDDEV_POP()  -- 모표준편차

기억할 패턴

SELECT
    그룹컬럼,
    AVG(값),
    VAR_SAMP(값)
FROM 테이블
GROUP BY 그룹컬럼

한 줄 요약

이 문제의 핵심은 평균을 구하는 것이 아니라 "표본분산(VAR_SAMP)"을 사용해야 한다는 점이다. VARIANCE() 대신 VAR_SAMP()를 사용하여 quartet별 평균과 표본분산을 계산해야 한다.