SQL에서 중간값을 구해 봅시다.
참고문제
https://solvesql.com/problems/finedust-seasonal-summary/
https://solvesql.com/problems/finedust-seasonal-summary/
solvesql.com
여기 까지 왔다는 건 중앙값이 뭔지는 안다는 뜻이겠죠? 자세한 설명은 하지 않겠습니다.
우선 기본 데이터를 준비 합니다.
SELECT
ROW_NUMBER() OVER(PARTITION BY season ORDER BY pm10) AS row_num,
COUNT(*) OVER(PARTITION BY season) AS cnt
개절별로 순서와 그 개수를 준비해 줍니다.
아래는 중앙값 구하는 공식 입니다. 이 값은 데이터 수가 홀수이던 짝수이던 정확한 값을 구해 줍니다.
WHERE row_num IN ((cnt + 1) / 2, (cnt + 2) / 2)
예시
5개 데이터 : (5 + 1) / 2 = 3, (5 + 2)/2 = 3 -> 3번째 값
6개 데이터 : (6 + 1) / 2 = 3, (6 + 2 ) / 2 = 4 -> 3번째 4번째 값
최종 값 계산
SELECT season, ROUND(AVG(pm10), 2) AS pm10_median
FROM preprocessed_table
WHERE row_num IN ((cnt + 1) / 2, (cnt + 2) / 2)
GROUP BY season
값이 홀수 개면 AVG(중앙값들)
짝수개면 AVG(값1, 값2) = 중앙값이 나옵니다.
블로그 글 스타일이 계속 바뀌는데 아무튼 많은 참조 부탁 드립니다.
'MYSQL > 개념' 카테고리의 다른 글
코호트란? (Cohort) (0) | 2025.07.02 |
---|---|
ROWS와 RANGE() (0) | 2025.07.01 |
윈도우함수 잘 쓰기 (0) | 2025.06.27 |
INSTR() (0) | 2025.06.21 |
언피펏(unpivot) (0) | 2025.06.19 |