[SQL ps] Median in MySQL. Hackerrank weather observation station 20

이찬행·2022년 5월 6일
0

SQL-문제풀이

목록 보기
6/7

문제 정의

  • MySQL에는 median을 구하는 함수가 내장되어 있지 않아 직접 구해야 한다
  • 문제 링크

문제 풀이

중간값은 주어진 값들을 순서대로 나열했을 때, 중간에 있는 값.

  1. 그렇다면 windown function의 rank를 이용해 푸는 방법 > 중간 rank 값을 찾기
  • 그런데 주어진 값들의 수가 홀수일 때는 값이 하나지만, 짝수일 때는 두 값의 합에서 2를 나누어주어야 한다.
  • WHERE 절에 CASE을 사용할 수 있다.
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 사용
;
  1. window function 중 percent_rank() 이용하기
    percent_rank() 함수 링크
 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
;
profile
what's on your mind?

0개의 댓글