/////
Search
Duplicate

Weather Observation Station 20

태그
서브쿼리
Median
SELF_JOIN
한 번 더 체크

문제

median is defined as a number separating the higher half of a data set from the lower half. Query the median of the Northern Latitudes (LAT_N) from STATION and round your answer to  decimal places.
Input Format
The STATION table is described as follows:
where LAT_N is the northern latitude and LONG_W is the western longitude.

정답

SELECT ROUND(LAT_N, 4) FROM STATION S WHERE (SELECT ROUND(COUNT(S.id)/2)-1 FROM STATION) = (SELECT COUNT(S1.id) FROM STATION S1 WHERE S1.LAT_N > S.LAT_N);
SQL
복사

풀이

WHERE절을 활용하여 SELF JOIN을 수행하여 푸는 문제이다.
Median의 특징은 그 값을 기준으로 더 높은(큰) 값을 가진 데이터의 개수와 더 낮은(작은) 값을 가진 데이터의 개수가 동일하다는 점이다.
그리고 그 개수는 총 데이터 개수를 2로 나누고 반올림 한 다음 1을 빼준 값과 동일하다.
예를 들어 총 5개의 데이터가 있으면 중앙값인 세 번째 값보다 작은(또는 큰) 값의 개수는 ROUND(5/2)-1 = 2 개 이다.
따라서 우선 WHERE절에서 중앙값을 기준으로 더 크거나 작은 값들의 개수를 구해준다.
(SELECT ROUND(COUNT(S.id)/2)-1 FROM STATION)
SQL
복사
→ 만약 SELECT 절을 이용하지 않고 바로 COUNT()를 사용하려고 하면 에러가 뜨므로 조심.
그 다음 메인 쿼리의 LAT_N을 기준으로 더 큰 서브 쿼리의 LAT_N의 개수를 구하는 쿼리를 짜자.
(SELECT COUNT(S1.id) FROM STATION S1 WHERE S1.LAT_N > S.LAT_N)
SQL
복사
마지막으로 둘이 같다고 놓으면 된다.
WHERE (SELECT ROUND(COUNT(S.id)/2)-1 FROM STATION) = (SELECT COUNT(S1.id) FROM STATION S1 WHERE S1.LAT_N > S.LAT_N)
SQL
복사