본문 바로가기
MYSQL/개념

SQL에서 중간값 구하기

by 수스리 2025. 6. 24.

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