중간값은 주어진 값들을 순서대로 나열했을 때, 중간에 있는 값.
WITH TEMP AS (SELECT LAT_N, ROW_NUMBER() OVER (ORDER BY LAT_N) AS RNK, COUNT(*) OVER () AS N
FROM STATION
)
SELECT ROUND(AVG(LAT_N), 4)
FROM TEMP
WHERE CASE WHEN MOD(N, 2)=1 THEN RNK=(N+1)/2 #주어진 값들의 수가 홀수일 때,
ELSE RNK IN (N/2, (N/2)+1) #주어진 값들의 수가 짝수일 때
END
# where 절에 case clause 사용
;
WITH TEMP AS (SELECT PERCENT_RANK() OVER (ORDER BY LAT_N) AS RNK, LAT_N
FROM STATION
)
SELECT ROUND(AVG(LAT_N), 4)
FROM TEMP
WHERE RNK=0.5
;