본문 바로가기
[업무 지식]/MySQL

[row index] Weather Observation Station 20

by 에디터 윤슬 2024. 11. 25.

링크

https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true

 

Weather Observation Station 20 | HackerRank

Query the median of Northern Latitudes in STATION and round to 4 decimal places.

www.hackerrank.com

 

문제

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.

 

정답

set @rowindex := -1;

select round(avg(lat_n), 4) as median
from (
    select @rowindex := @rowindex + 1 as rowindex,
            lat_n
    from station
    order by lat_n
    ) as sorted_lat_n
where rowindex in (floor(@rowindex / 2), ceil(@rowindex / 2));

 

새롭게 이해한 내용

  • rowindex란?
    • rowindex는 MySQL에서 데이터를 처리할 때 각 행에 고유한 순번을 부여하기 위해 사용되는 사용자 정의 변수입니다. 이는 MySQL의 세션 변수(@variable)를 활용하여 구현됩니다.
SET @rowindex := 0;

SELECT 
    @rowindex := @rowindex + 1 AS rowindex, 
    column_name
FROM table_name
ORDER BY column_name;
  • 작동 방식
    • @rowindex는 초기값으로 0을 설정합니다.
    • 쿼리를 실행할 때, 각 행이 처리될 때마다 @rowindex 값이 +1씩 증가합니다.
    • 결과적으로, 각 행에는 1부터 시작하는 고유 순번이 부여됩니다.
  • 특징
    • rowindex는 데이터를 정렬한 후 순번을 부여하기 때문에 정렬된 데이터의 순서를 기반으로 동작합니다.
    • 이를 통해 특정 인덱스(예: 중앙값 위치)를 쉽게 참조할 수 있습니다.

 

  • CEIL() 함수란?
    • CEIL()은 MySQL에서 제공하는 내장 수학 함수로, 주어진 숫자를 올림하여 가장 가까운 정수를 반환합니다.
SELECT CEIL(4.2); -- 결과: 5
SELECT CEIL(7.0); -- 결과: 7
SELECT CEIL(-3.8); -- 결과: -3

 

  • MEDIAN 계산에서의 활용
    • (a) rowindex의 역할
      • 데이터를 정렬한 후, 각 행에 순번을 부여하여 데이터의 위치를 추적합니다.
      • 중앙값을 계산하려면 데이터의 중간 위치를 알아야 하므로, rowindex로 각 행의 위치를 식별합니다.
    • (b) CEIL()의 역할
      • 데이터 개수가 짝수일 때, 두 개의 중간값 중 하나를 선택하기 위해 사용됩니다.
      • 예를 들어, 데이터가 6개라면 중간값의 위치는 6/2=3 6/2+1=4입니다.
      • 이때, CEIL(3)=3 CEIL(4)=4로 정확히 중간 두 값을 선택할 수 있습니다.