코딩테스트/해커랭크(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