Problem
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 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.
Solve
- Oracle 의 경우, 중위값을 구할 때 median() 함수로 쉽게 해당 값을 구할 수 있다.
- MySQL은 median() 함수를 제공하지 않는다.
아래는 나의 문제풀이
select round(lat_n,4)
from(
select lat_n
, rank() over(order by lat_n desc) as rowIndex
from station
) a
where a.rowIndex = (select round(count(*)/2) from station)
limit 1
이외에도 여러가지 방법이 있는데,
- percent_rank() over(partirion by lat_n) 을 이용, 해당 값이 0.5가 나오는 row를 조건으로 두어 추출하는 방식
- set @var = ~~ 와 같이 쓰임새에 맞게 변수를 선언하여, 쿼리에서 해당 변수를 활용하는 방식
등이 있었다.
2번과 같은 문제풀이는
set @mid = (select round(count(*)/2) from station);
select round(lat_n,4)
from(
select LAT_N
, row_number() over(order by LAT_N DESC) as rowIndex
from station
) a
where a.rowIndex = mid
limit 1;
위 코드 처럼 진행하고자 했지만, 변수 이름들끼리 충돌이 있는건지, set 이 채점이 안되는 건지,, 자꾸 오류가 나서 이 전의 문제 풀이 방식으로 진행하여 완료하였다!
출처
https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true
타 문제 풀이 방법 1.
https://jaaamj.tistory.com/148
타 문제 풀이 방법 2.
'Study > SQL' 카테고리의 다른 글
MySQL | HackerRank | Top Competitors (0) | 2023.01.31 |
---|---|
MySQL | HackerRank | The Report (0) | 2023.01.30 |
MySQL | HackerRank | The PADS (0) | 2023.01.27 |
MySQL | HackerRank | New Companies (1) | 2022.11.16 |
MySQL | HackerRank | Binary Tree Nodes (0) | 2022.11.15 |