다음 테이블에서 북위(LAT_N)의 중앙값(Median)을 찾고, 정답을 소수점 4자리 이하로 반올림하시오.
select round(avg(lat_n),4)
from(
select lat_n, count(*) over() as total_rows, row_number() over (order by lat_n) as row_num
from station
) as sub_table
where row_num in ((total_rows+1)/2, (total_rows+2)/2)
DBMS는 종류에 따라 지원하는 함수와 문법이 조금씩 다르다. 문제를 풀기위해 PERCENTILE_CONT 함수를 사용해봤으나, MySQL은 해당 함수를 지원하지 않았다. 따라서 LAT_N으로 테이블을 정렬하고, 행의 수에 따라 중앙값을 추출하는 쿼리를 작성했다. 과정은 아래와 같다.
Inline View : station에서 LAT_N column을 선택하고, 전체 행의 개수와 각 행의 순서를 계산한다. 이 때, window function을 활용해서 모든 행에 대해 계산을 실시한다. 정렬된 값에 따라 row_number가 행 번호를 부여하기 때문에 우리는 행의 개수에 따라 중앙값을 추측할 수 있다.
where절 : 중앙값을 계산하기 위해 조건을 추가한다. 전체 행 수가 홀수인 경우와 짝수인 경우에 따라 중앙값은 달라진다. 행의 개수가 홀수인 경우 중앙값은 하나이고, 짝수이면 2개이기 때문이다. select 절에서 avg 함수를 사용하면, 홀/짝 여부와 관계 없이 모든 경우의 중앙값을 찾을 수 있다.
Weather Observation Station 20 | HackerRank
Query the median of Northern Latitudes in STATION and round to 4 decimal places.
www.hackerrank.com
'코딩 테스트 > SQL' 카테고리의 다른 글
| [MySQL] 프로그래머스 - 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 (0) | 2024.06.25 |
|---|---|
| [MySQL] - Placements (0) | 2024.02.08 |
| [MySQL] HackerRank - The PADS (0) | 2024.01.16 |
| [MySQL] HackerRank - The Report (2) | 2024.01.14 |
| [MySQL] HackerRank - Weather Observation Station 5 (2) | 2024.01.14 |