데이터 분석/SQL 코테

[SQL코테/HackerRank] Weather Observation Station 20

Sheryl Yun 2024. 6. 18. 09:36

문제 링크

 

Weather Observation Station 20 | HackerRank

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

www.hackerrank.com

 

 

문제 요약

1. lat_n의 중앙값(median)을 구한다.

2. 반올림하여 4자리까지 나타낸다.

 

 

풀이 과정

중앙값은 전체 수치 중 위치 상으로 가장 가운데에 있는 값이다.

 

처음에 자바스크립트처럼 '인덱스를 구해서 중간 값을 찾아야 하나,

인덱스가 1부터 시작하는 파생 컬럼을 만들어야 하나' 여러 가지 고민을 했다.

 

mysql로 중앙값 구하는 방법을 찾아보니 oracle로는 median()이라는 메서드로 바로 구할 수 있고

mysql은 PERCENT_RANK() 함수를 활용하여 구할 수 있었다.

 

 

PERCENT_RANK()
특정 값이 전체에서 몇 퍼센트인지 알려주는 함수

 

 

즉, 퍼센트를 통해 특정 값의 '위치'를 알려준다.

 

WHERE 절에 percent = 0.5 를 찾는다는 조건을 추가로 걸어주면

전체 범위 중 50%(한가운데) 값인 중앙값을 얻을 수 있다.

 

 

코드

FROM 서브쿼리를 사용하여 서브쿼리의 결과값(= lat_n을 퍼센트로 나타낸 값)에

percent = 0.5 조건을 걸어 최종적으로 구해진 중앙값 lat_n을 반올림하여 답을 구했다.

SELECT ROUND(lat_n, 4)
FROM (
    SELECT lat_n, PERCENT_RANK() OVER(ORDER BY lat_n) AS percent
    FROM station
) AS foo -- 인라인뷰 서브쿼리는 반드시 뒤에 별칭
WHERE percent = 0.5;