LAT_N(북위) 칼럼의 Median(중앙값)을 구해라.
소숫점 5번째 자리에서 반올림 할것. (답은 소숫점 4자리)
SET
이라는 쿼리를 통해 새로운 변수를 정의하고, 파생 칼럼을 만들어야 함. SET @row_index = -1;
SELECT @row_index:=@row_index+1, --하나씩 +1 하는 값 지정
LAT_N
FROM station
order by LAT_N
위의 쿼리를 실행하면 다음과 같은 값을 얻을 수 있다.
전체 행이 짝수일때, 예를 들어 index가 0,1,2,3이라면 중앙값은 index가 1,2인 값의 평균이다. 마지막 index 3/2 = 1.5이므로 where절에 넣을 조건은 CEIL(row_index)
, FLOOR(row_index)
- 올림, 내림 값의 평균이다.
전체 행이 홀수일때, 예를 들어 index가 0,1,2라면 중앙값은 index가 1인 row다. 마지막 index 2/2 = 1이므로 where절에 넣을 조건은 row_index/2
값이다. 그런데 1을 올림, 내림해도 1이므로 row_index가 홀수인경우에 맞춰서 쿼리를 해도 값이 달라지지 않는다. 따라서,,
set @rowindex = -1;
select round(AVG(LAT_N),4) from (
select @rowindex:=@rowindex+1 as row_index, LAT_N from station
order by LAT_N)row_table
where row_index in (ceil(@rowindex/2), floor(@rowindex/2))
@rowindex
값은 다르다. @rowindex
는 서브쿼리에서 +1을 쭉 했기때문에 마지막 행의 index값이다. 여기서는 그러므로 499.