일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 그로스해킹
- mysql :=
- GROUPBY
- SUM
- solvesql
- pandas
- Oracle
- 프로그래머스
- not in
- MySQL
- having
- airflow 설치
- SQL
- PostgreSQL
- 다중 JOIN
- matplotlib
- TRUNCATE
- join
- 머신러닝
- 데이터분석
- Limit
- 결측값
- Round
- 데이터시각화
- SQLite
- 데이터리안 웨비나
- 전처리
- 파이썬
- seaborn
- hackerrank
- 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 |