HackerRank | Weather Observation Station 20

jeonghens·2025년 5월 29일
0

SQL: HackerRank

목록 보기
22/49

HackerRank Weather Observation Station 20


문제

중앙값(median)을 데이터 집합을 높은 절반과 낮은 절반으로 나누는 숫자로 정의할 때, STATION 테이블에서 LAT_N의 중앙값을 구하고, 결과를 소수점 4자리까지 반올림해서 출력하는 문제이다.


풀이

먼저 SUBQUERY를 사용해 전체 행 개수(N)와 각 행의 정렬 순서(ROW_NUM)를 가져왔다.

구체적으로, ROW_NUMBER() OVER(ORDER BY LAT_N ASC)로 LAT_N을 오름차순으로 정렬하고 각 행에 순번(ROW_NUM)을 부여했으며, COUNT(*) OVER()로 전체 행 개수(N)를 계산해 각 행에 부여했다.

이후 CASE 문을 활용해 홀수 개수일 때는 (N+1)/2번째 행, 짝수 개수일 때는 N/2 및 (N/2)+1번째 행을 선택하도록 했다.

마지막으로 AVG(LAT_N)으로 선택된 행의 평균을 계산하고, ROUND(..., 4)로 소수점 4자리까지 반올림해 출력했다.


SELECT
    ROUND(AVG(LAT_N), 4)
FROM (
    SELECT
        LAT_N,
        ROW_NUMBER() OVER(ORDER BY LAT_N ASC) AS ROW_NUM,
        COUNT(*) OVER() AS N
    FROM
        STATION
) AS SUBQUERY
WHERE
    CASE
        WHEN N % 2 = 1 THEN ROW_NUM = (N + 1) / 2
        ELSE ROW_NUM IN (N / 2, N / 2 + 1)
    END;
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글