[SQL][HackerRank]Weather Observation Station 20

Yewon Kimยท2021๋…„ 12์›” 11์ผ
0

SQL

๋ชฉ๋ก ๋ณด๊ธฐ
2/6
post-thumbnail

๐Ÿ”Š๋ณธ ํฌ์ŠคํŒ…์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ์ž๋ฃŒ์™€ ์ถœ์ฒ˜๋Š” 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์ธ ๊ฐ’์„ ๊ตฌํ•ด์ฃผ๋ฉด ์ค‘์•™๊ฐ’์ด ๋œ๋‹ค.


๐ŸŽˆ๋ฌธ์ œํ•ด๊ฒฐ์„ ์œ„ํ•œ ์•„์ด๋””์–ด

  • Oracle์˜ ๊ฒฝ์šฐ, MEDIAN ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
  • MySQL์˜ ๊ฒฝ์šฐ, PERCENT_RANK ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
PERCENT_RANK() OVER([PARTITION BY partition_expression][ORDER BY order_list]) 

๐ŸŽˆ์˜๊ฒฌ
๊ธฐ๋ณธ์ ์œผ๋กœ SQL๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ, MySQL์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์ด ๋ฌธ์ œ๋Š” Oracle์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š”๊ฒŒ ํ›จ์”ฌ ๋” ์‰ฌ์› ๋‹ค. ๊ทธ๋ž˜๋„ ๋‚˜์ค‘์— ์–ด๋– ํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— MySQL๋กœ๋„ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€