๐๋ณธ ํฌ์คํ
์์ ์ฌ์ฉ๋๋ ํ
์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ HackerRank ์์ ๋ฐํ๋๋ค.
https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=false
๐์กฐ๊ฑด
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.
STATION ํ ์ด๋ธ์์ LAT_N ์ปฌ๋ผ์ ์ค์๊ฐ์ ์ฟผ๋ฆฌํด๋ผ. ๊ทธ๋ฆฌ๊ณ ํด๋น ๊ฐ์ ์์์ 4์๋ฆฌ๊น์ง ๋ฐ์ฌ๋ฆผํ์ฌ ๋ํ๋ด๋ผ.
๐Version 1. Oracle
SELECT ROUND(MEDIAN(LAT_N),4)
FROM STATION;
Oracle ๋ด์ฅํจ์์ธ MEDIAN์ ์ด์ฉํ๋ฉด ์ค์๊ฐ์ ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค.
ํ์ง๋ง MySQL์์๋ MEDIAN ํจ์๊ฐ ์ ์ฉ์ด ์๋๋ค.
๐Version 2. MySQL
SELECT ROUND(LAT_N,4)
FROM (SELECT LAT_N, PERCENT_RANK() OVER (ORDER BY LAT_N ASC) percent
FROM STATION) A
WHERE percent=0.5;
PERCENT_RANK ํจ์๋ ํด๋น ๊ทธ๋ฃน ๋ด์ ๋ฐฑ๋ถ์ ์์(Percentil Rank)๋ฅผ ๋ฐํํ๋ค. 0์ด๊ณผ 1์ดํ์ ๋์ ๋ถํฌ ๊ฐ์ ๋ฐํํ๋ CUME_DIST์๋ ๋ฌ๋ฆฌ, PERCENT_RANK๋ 0์ด์ 1์ดํ์ ๊ฐ์ ๋ฐํํ๋ค.
๋ฐฑ๋ถ์ ์์๋ ๊ฐ๋
์์ฒด๊ฐ ๊ทธ๋ฃน ์์์ ํด๋น ๋ก์ฐ์ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ ๋น์จ์ด๋ฏ๋ก ๊ทธ ๊ฐ์ด 0.5์ธ ๊ฐ์ ๊ตฌํด์ฃผ๋ฉด ์ค์๊ฐ์ด ๋๋ค.
๐๋ฌธ์ ํด๊ฒฐ์ ์ํ ์์ด๋์ด
PERCENT_RANK() OVER([PARTITION BY partition_expression][ORDER BY order_list])
๐์๊ฒฌ
๊ธฐ๋ณธ์ ์ผ๋ก SQL๋ฌธ์ ๋ฅผ ํ ๋, MySQL์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋๋ฐ ์ด ๋ฌธ์ ๋ Oracle์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋๊ฒ ํจ์ฌ ๋ ์ฌ์ ๋ค. ๊ทธ๋๋ ๋์ค์ ์ด๋ ํ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ MySQL๋ก๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ดค๋ค.