Table 'STATION'
Field | Type | Note |
ID | NUMBER | |
CITY | VARCHAR2 (21) | Cities in USA |
STATE | VARCHAR2 (2) | States in USA |
LAT_N | NUMBER | Northern Latitude |
LONG_W | NUMBER | Western Longitude |
- Weather Observation Station 18, 19, 20
- SubDomain: Aggregation
- Skills: SQL Basic, SQL Intermediate
Question 18
Answer
SELECT ROUND(ABS(MIN(lat_n)-MAX(lat_n)) + ABS(MIN(long_w)-MAX(long_w)),4)
FROM station;
Question 19
Answer
SELECT ROUND(POW(POW(MAX(lat_n)-MIN(lat_n),2)+POW(MAX(long_w)-MIN(long_w),2),0.5),4)
FROM station;
Question 20
A 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 4 decimal places.
→ Median 함수가 없는 MySQL에서 lat_n 변수의 중간값 구하기
Answer
SET @rowIndex = -1;
WITH ordered_stat AS (
SELECT @rowIndex := @rowIndex+1 AS row_num, lat_n
FROM station
ORDER BY lat_n
)
SELECT ROUND(AVG(lat_n),4)
FROM ordered_stat
WHERE row_num IN (FLOOR(@rowIndex/2),CEIL(@rowIndex/2));
Memo
지역변수 설정
- 지역변수 설정은 언제나 어렵다
- SET 이용 후 쿼리문 닫아주기 (;)
- 지역변수 최종 결과물 (@rowIndex) 잘 활용하기
- ROW_NUMBER () OVER (ORDER BY _ ) 사용하지 않은 이유는 인덱스를 0부터 시작하기 위해서
SELECT ROUND(S.LAT_N,4) medium
FROM station S
WHERE (SELECT COUNT(lat_n) FROM station WHERE Lat_N < S.LAT_N ) = (SELECT COUNT(lat_n) FROM station WHERE Lat_N > S.LAT_N);
Memo
더 간단한 쿼리문은 없을까 고민하다가..
- 중간값은 아래 위로 정확히 같은 수의 데이터셋을 나눈다는 질문을 그대로 적용한 쿼리문 발견
- STATION 데이터를 두 번 호출
- 처음 호출한 STATION을 기준으로 '두번째로 호출한 STATION이 같은 수의 데이터셋으로 나뉘는 지점'을 WHERE 구문으로 지정
질문과 조언은 언제나 환영입니다!
'Analysis > SQL' 카테고리의 다른 글
[MySQL] LeetCode - Game Play Analysis I (1) | 2024.05.01 |
---|---|
[MySQL] Hackerrank - Olivander's Inventory (1) | 2024.03.22 |
[MySQL] HackerRank - The Report (0) | 2024.03.13 |
[MySQL] HackerRank - Weather Observation Station 13-17 (0) | 2023.08.11 |
댓글