Prepare > SQL > Aggregation > Weather Observation Station 20

2023. 6. 14. 19:30HackerRank-My SQL

 

Weather Observation Station 20 | HackerRank

Query the median of Northern Latitudes in STATION and round to 4 decimal places.

www.hackerrank.com

 

문제


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.

 

=> STATION에서 LAT_N의 중앙값을 쿼리하라.

 

 

 

 

코드


SELECT 
ROUND(S1.LAT_N, 4)
FROM STATION AS S1
WHERE (SELECT COUNT(LAT_N) FROM STATION AS S2 WHERE S1.LAT_N < S2.LAT_N) = 
    (SELECT COUNT(LAT_N) FROM STATION AS S2 WHERE S1.LAT_N > S2.LAT_N)
  • 중앙 찾기 = 중앙값의 특징 찾기 = 중앙값의 위 아래로 존재하는 값의 개수는 같다.

 

 

 

 

노트


ANOTHER CODE BY

https://velog.io/@yeahxne/SQLHackerRankWeather-Observation-Station-20

SELECT ROUND(LAT_N,4)
FROM (SELECT LAT_N, PERCENT_RANK() OVER (ORDER BY LAT_N ASC) AS percent
      FROM STATION) A
WHERE percent=0.5;

어케 이해해야 할까?

 

  • PERCENT_RANK함수

출처: 바드

  • OVER() 함수 or OVER 절

MS: 관련 창 함수를 적용하기 전에 행 집합의 분할과 순서를 결정합니다. 즉, OVER 절은 쿼리 결과 집합 내의 창 또는 사용자 지정 행 집합을 정의합니다. 그런 다음 창 함수가 창의 각 행에 대한 값을 계산합니다. OVER 절에 함수를 사용하여 이동 평균, 누적 집계, 누계 또는 그룹 결과당 상위 N개 결과 등의 집계된 값을 계산할 수 있습니다.

 

쿼리 결과 집합 내의 창 또는 사용자 지정 행 집합을 정의합니다: 작은 FROM 절 역할

 

  • OVER 절에 들어가는 인수들
  • PARTITION BY - 쿼리 결과 집합을 파티션으로 분할합니다: 작은 FROM 절 역할에 GROUP BY를 끼얹음
  • ORDER BY - 결과 집합의 각 파티션 내에서 행의 논리적 순서를 정의합니다: 정렬 맞음
  • ROWS/RANGE - 파티션 내의 시작점 및 끝점을 지정하여 파티션 내의 행을 제한합니다. ORDER BY 인수가 필요하며, ORDER BY 인수가 지정된 경우 기본값은 파티션 시작부터 현재 요소까지입니다

 

 

ANOTHER CODE 2

SELECT ROUND(LAT_N,4) 
FROM (SELECT LAT_N, ROW_NUMBER() OVER(ORDER BY LAT_N) rownum FROM STATION) K1
WHERE rownum = (SELECT CEIL(COUNT(*)/2) FROM STATION);
  • ROW_NUMBER() OVER () 함수
  • OVER에 들어가는 컬럼을 기준을 기준으로 열 번호를 생성하는 듯?

 

 

 

두 번째 시도

SELECT ROUND(S1.LAT_N,4) FROM STATION AS S1
WHERE (SELECT COUNT(S2.LAT_N) FROM STATION AS S2 WHERE S1.LAT_N > S2.LAT_N ORDER BY S2.LAT_N) 
    = (SELECT COUNT(S3.LAT_N) FROM STATION AS S3 WHERE S1.LAT_N < S3.LAT_N ORDER BY S3.LAT_N)
ORDER BY LAT_N
  • 처음이랑 같네

 

 

 

참조


 

OVER 절(Transact-SQL) - SQL Server

쿼리 결과 집합 내의 사용자 지정 행 집합을 정의하는 OVER 절의 Transact-SQL 참조입니다.

learn.microsoft.com

 

PERCENT_RANK(Transact-SQL) - SQL Server

PERCENT_RANK(Transact-SQL)

learn.microsoft.com

 

ROW_NUMBER(Transact-SQL) - SQL Server

ROW_NUMBER 함수의 Transact-SQL 참조입니다. 이 함수는 결과 집합의 출력 번호를 매깁니다.

learn.microsoft.com