일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 데이터분석
- having
- join
- 데이터리안 웨비나
- SQLite
- PostgreSQL
- 프로그래머스
- seaborn
- MySQL
- SQL
- 데이터시각화
- solvesql
- airflow 설치
- GROUPBY
- TRUNCATE
- hackerrank
- 다중 JOIN
- 파이썬
- 그로스해킹
- matplotlib
- airflow.cfg
- Oracle
- Round
- 결측값
- Limit
- 전처리
- SUM
- 머신러닝
- pandas
- not in
- Today
- Total
Milky's note
[HackerRank](M) Weather Observation Station 20 본문
[문제]
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 보다 숫자 관련 함수들은 아직 부족한 것 같다. 어떤 방법이던지 잘 숙지해야겠다.
'SQL > SQL 코딩 테스트-HackerRank' 카테고리의 다른 글
[HackerRank](M) Placements (0) | 2022.03.31 |
---|---|
[HackerRank](M) Contest Leaderboard (0) | 2022.03.30 |
[HackerRank](M) Weather Observation Station 19 (0) | 2022.03.28 |
[HackerRank](M) Weather Observation Station 18 (0) | 2022.03.28 |
[HackerRank](M) New Companies (0) | 2022.03.28 |