MySQL 해커랭크 | Weather Observation Station 20 (중앙값 찾는 방법, PERCENT_RANK 함수, DENSE_RANK 함수)

    728x90

     

    문제

    https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true

     

    Weather Observation Station 20 | HackerRank

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

    www.hackerrank.com

    median is defined as a number separating the higher half of a data set from the lower half. 

    • Query the median of the Northern Latitudes (LAT_N) from STATION 
    • round your answer to 4 decimal places

     

    테이블

    STATION 테이블

     

    풀이과정

    ▶ PERCENT_RANK()

    : 결과 집합 내 행의 백분위수 순위를 계산하는 상대 순위 함수

    : 지정된 순서 열에 있는 모든 값 중에서 현재 행 값의 상대적 위치를 나타내는 0과 1 사이의 값을 반환

    : 계산은 순위를 기준으로 하지만 결과는 0과 1 사이에서 정규화됨

     

    # 정답

    • PERCNET_RANK 함수를 이용해 위도를 백분위수로 정규화한 뒤 순위 부여
      • PERCENT_RANK() OVER(PARTITION BY 컬럼명 ORDER BY 컬럼명) 
        이렇게 파티션을 사용하면 해당 파티션(그룹) 내에서 순위가 부여됨
    •  WHERE절에서 백분위수가 0.5인 값 ( =중앙값 )을 찾도록 조건을 걺
    1
    2
    3
    SELECT ROUND(LAT_N, 4)
    FROM (SELECT LAT_N, PERCENT_RANK() OVER(ORDER BY LAT_N) median FROM STATION) m
    WHERE median = 0.5
    cs

     

    배운점

    ▶ DENSE_RANK()

    • RANK 함수와 유사하지만
      RANK 함수는 공동순위가 있는 경우 해당 수만큼 순위가 건너 뛰어짐
      • ex. 2등이 두 명인 경우, 1 2 2 4 이렇게 순위가 부여됨
    • 그에 반해, DENSE_RANK 함수
      공동순위가 있어도 숫자를 뛰어넘지 않고 순위가 매겨짐
      •  ex. 2등이 두 명인 경우, 1 2 2 3 이렇게 순위가 부여됨
    728x90

    댓글