코딩테스트/해커랭크(HackerRank) - MySQL

해커랭크(HackerRank) SQL 문제풀이 - Weather Observation Station 20

진한색 2023. 2. 3. 15:35

LAT_N의 Median 중앙값을 구하는 문제다.

 

PERCENT_RANK()를 이용하는 방법

 

PERCENT_RANK() 함수 기본 이용방법

PERCENT_RANK() OVER (PARTITION BY expr ...  ORDER BY expr ...)

0부터 1까지 값을 반환한다. ( rank - 1 ) / ( total_rows - 1 )을 계산. rank는 행에 매겨지는 순위, total_rows는 모든 행의 개수.

 

이 값이 0.5이면 중앙값이다.

SELECT ROUND(LAT_N,4)
    FROM (SELECT LAT_N,PERCENT_RANK() OVER(ORDER BY LAT_N) PER FROM STATION) TMP
    WHERE PER=0.5;

 

 

다른 방법

정렬 후 행의 개수를 세어 중간까지만 찾은 후 반대로 정렬해서 첫 번째만 출력. ROW_NUMBER() 사용. 

 

SET @CNT=(SELECT COUNT(*) FROM STATION);

SELECT ROUND(LAT_N,4)
    FROM (SELECT LAT_N,ROW_NUMBER() OVER(ORDER BY LAT_N) A FROM STATION)B 
    WHERE A=(@CNT/2);

728x90