홍동이의 성장일기

[HackerRank] Weather Observation Station 20 본문

Tool/SQL 코딩테스트 풀이

[HackerRank] Weather Observation Station 20

홍동2 2023. 10. 13. 17:20

 

Weather Observation Station 20 | HackerRank

Query the median of Northern Latitudes in STATION and round to 4 decimal places.

www.hackerrank.com

 

풀이 1

SELECT ROUND(AVG(lat_n), 4)
FROM (
    SELECT lat_n
        , PERCENT_RANK() OVER (ORDER BY lat_n) as p_rn
    FROM station
) as t
WHERE p_rn = 0.5

 

풀이 2

SELECT ROUND(AVG(lat_n), 4)
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY lat_n) as row_num
        , COUNT(*) OVER () as n
        , lat_n
    FROM station
) as t
WHERE CASE
            WHEN MOD(n, 2) = 1 THEN row_num = (n+1)/2
            ELSE row_num IN (n/2, (n/2)+1)
      END

 

💡 문제풀이 (1)

 

SELECT lat_n
    , PERCENT_RANK() OVER (ORDER BY lat_n) as p_rn
FROM station

PERCENT_RANK 함수를 사용하여 백분위에 대한 누적분포를 구해줍니다.

 

p_rn이 0.5에 위치한 행을 불러온 후 평균을 구해줍니다.

 

 

 

 

 

💡 문제풀이 (2)

 

SELECT ROW_NUMBER() OVER (ORDER BY lat_n) as row_num
    , COUNT(*) OVER () as n
    , lat_n
FROM station

lat_n에 대해 row_number와 행의 총 개수를 구해줍니다.

 

 

 

 

 

 

 

 

SELECT *
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY lat_n) as row_num
        , COUNT(*) OVER () as n
        , lat_n
    FROM station
) as t
WHERE CASE
            WHEN MOD(n, 2) = 1 THEN row_num = (n+1)/2
            ELSE row_num IN (n/2, (n/2)+1)
      END

중앙값의 위치를 구하는 식은 다음과 같습니다.

  • 데이터가 짝수개일 경우: ((n / 2) + ((n / 2) + 1)) / 2
  • 데이터가 홀수개일 경우: (n + 1) / 2

 

WHERE절에 CASE문을 사용하여 중앙값 위치에 있는 데이터를 반환해줍니다.

 

 

 

ROUND(AVG(lat_n), 4)

TEST DATA의 경우 데이터가 홀수개여서 하나만 반환되지만 데이터가 짝수개인 경우는 2개의 데이터가 반환됩니다.

따라서 도출된 행의 평균을 구해주고, 문제의 조건처럼 소수점 4자리까지 표현해줍니다.

 


📍본 내용은  '[백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이'를  수강하며 작성한 내용입니다.

728x90
Comments