SQL 코드카타_Weather Observation Station 20
# 목적, 목표 : 북위도 ( LAT_N ) 의 중앙값, 소수점 4자리에서 반올림 적용
# 필요한 컬럼 : LAT_N
# 컬럼 조건 : ROW_NUMBER, COUNT, AVG
# 사용할 테이블 : STATION
# join key : 없음
# 테이블 조건 : ROW_NUMBER = 중앙
# 필요한 그룹 : 없음
# 필요한 그룹 조건 : 없음
# 정렬 기준 : 없음
# 주의사항 : 중앙값 = 데이터 개수가 홀수일 때, 짝수일 때 구하는 방법이 다름
WITH A AS ( # ROW_NUMBER 매기기
SELECT LAT_N, ROW_NUMBER() OVER(order by LAT_N) AS ROW_NUMBER
FROM STATION),
B AS ( # 행 개수 구하기
SELECT COUNT(*) AS cnt
FROM STATION),
C AS ( # 홀수일 때
SELECT ROUND(LAT_N, 4) as ans1
FROM A
WHERE ROW_NUMBER = ROUND((SELECT cnt FROM B)/2, 0)),
D AS ( # 짝수일 때
SELECT ROUND(AVG(LAT_N), 4) as ans2
FROM A
WHERE ROW_NUMBER in ((SELECT cnt FROM B)/2, (SELECT cnt FROM B)/2 + 1)
SELECT CASE WHEN (SELECT cnt FROM B) %2 != 0 THEN (SELECT ans1 FROM C) # 홀수면 C에서 가져옴
ELSE (SELECT ans2 FROM D) END AS answer # 짝수면 D에서 가져옴
FROM STATION
WITH A AS (
SELECT LAT_N, ROW_NUMBER() OVER (ORDER BY LAT_N) AS rn
FROM STATION),
B AS (
SELECT COUNT(*) AS cnt
FROM STATION)
SELECT ROUND(AVG(LAT_N), 4) AS median
FROM A, B
WHERE rn IN (FLOOR((cnt + 1) / 2), CEIL((cnt + 1) / 2));
# A 테이블 : ROW_NUMBER 매기기
WITH A AS (
SELECT LAT_N, ROW_NUMBER() OVER (ORDER BY LAT_N) AS rn
FROM STATION),
# B 테이블 : 행 개수 구하기
B AS (
SELECT COUNT(*) AS cnt
FROM STATION)
# 중앙값 구하기 및 소수점 4자리에서 반올림
SELECT ROUND(AVG(LAT_N), 4) AS median
FROM A, B
WHERE rn IN (FLOOR((cnt + 1) / 2), CEIL((cnt + 1) / 2));
잘햇다잘햇다 고생햇수퍼노인 🙂↕️