Milky's note

[HackerRank](M) Weather Observation Station 20 본문

SQL/SQL 코딩 테스트-HackerRank

[HackerRank](M) Weather Observation Station 20

밀뿌 2022. 3. 28. 18:33

https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true&h_r=next-challenge&h_v=zen 

 

Weather Observation Station 20 | HackerRank

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

www.hackerrank.com

 

[문제]

A 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 and round your answer to  4 decimal places.

Input Format

The STATION table is described as follows:

where LAT_N is the northern latitude and LONG_W is the western longitude.

 

 

 

[답]

- oracle

select round(median(lat_n),4) from station;

중앙값을 구하는 문제이다.

당연히 된다는 생각으로 median 함수를 사용하였는데 mysql에서는 되지 않았다. 오라클로 넘어가보니까 오라클에선 잘 실행되었다.

오라클에서만 사용이 가능한 함수인가보당.... 그치만 여러 db를 공부해야하기 때문에 mysql은 다른 방식으로 접근을 해서 문제를 풀었다.

 

- mysql

select round(lat_n, 4) 
from
(select lat_n, percent_rank() over (order by lat_n) mid from STATION) p
where mid = 0.5

mysql에서는 median 함수가 없어서 다음과 같이 풀었다.

window function을 사용하여서 풀었는데 percent_rank를 사용하여 컬럼들을 나열한 뒤에 중간값을 찾기 위해

percent_rank 값이 0.5인 컬럼을 찾으면 된다.

이중 select 문을 사용해주었고, lat_n의 컬럼과 그에 대한 percent_rank를 나열한다.

order by는 lat_n으로 해준다. 그 뒤에 percent_rank의 값이 가운데 값이 0.5인 값을 찾아주면 된다.

 

mysql은 oracle 보다 숫자 관련 함수들은 아직 부족한 것 같다. 어떤 방법이던지 잘 숙지해야겠다.

Comments