링크
https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true
문제
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로 정확히 중간 두 값을 선택할 수 있습니다.
- (a) rowindex의 역할
'[업무 지식] > MySQL' 카테고리의 다른 글
[날짜 그룹화] SQL Project Planning (0) | 2024.12.03 |
---|---|
[MAX() over()] Challenges (0) | 2024.11.29 |
[left, right] Weather Observation Station 8 (0) | 2024.11.19 |
[REGEXP] Find Users With Valid E-Mails (0) | 2024.11.18 |
[GROUP_CONCAT] Group Sold Products By The Date (0) | 2024.11.18 |