개요
풀이
- MS-SQL은 중간값을 구해주는 함수가 따라 없어서 직접 구현을 해줘야함
- 전체 행수가 홀수인 1개의 케이스밖에 없어서 홀수인 경우에만 적용되는 쿼리문을 짜도 통과할 수는 있긴함
- 홀수인 경우와 짝수인 경우를 나눠서 WHERE문에서 조건처리를 해줌
SELECT CAST(ROUND(AVG(LAT_N), 4) AS NUMERIC(10,4)) AS MEDIAN
FROM
(SELECT LAT_N
, ROW_NUMBER() OVER(ORDER BY LAT_N) AS ROW_NUM
, COUNT(*) OVER() AS CNT
FROM STATION) AS SUB
WHERE CASE
WHEN CNT % 2 = 1 AND ROW_NUM = (CNT + 1) / 2
THEN 1
WHEN CNT % 2 = 0 AND (ROW_NUM = (CNT / 2) OR ROW_NUM = (CNT / 2) + 1)
THEN 1
END = 1
SELECT ROUND(AVG(LAT_N), 4) MEDIAN
FROM (SELECT LAT_N
, ROW_NUMBER() OVER(ORDER BY LAT_N) RN
, COUNT(1) OVER() + 1 CNT
FROM STATION
)
WHERE RN BETWEEN FLOOR(CNT / 2) AND CEIL(CNT / 2)