시작하기무료로 시작하기

SQL Server에서 중앙값 계산하기

SQL Server에는 MEDIAN() 함수가 없어요. 가장 비슷한 함수는 데이터 집합에서 n번째 백분위수의 값을 찾아주는 PERCENTILE_CONT()입니다.

인시던트 롤업 집합에서 사건 유형별로 중앙값이 평균과 얼마나 차이가 나는지 확인해 보려고 합니다. 이를 위해 이전 연습에서 사용한 AVG() 함수와 PERCENTILE_CONT()를 비교해 보겠습니다. 이들은 윈도 함수이며, 4장에서 더 자세히 다룰 예정이에요. 지금은 PERCENTILE_CONT()가 백분위수(0부터 1 사이의 소수)를 매개변수로 받는다는 점만 기억하세요. 또한 WITHIN GROUP 절 안에서 정렬된 그룹을 기준으로 계산되고, 필요하다면 데이터를 파티션하기 위해 OVER 절을 사용합니다. WITHIN GROUP 절에서는 50번째 백분위수를 구하고자 하는 열로 정렬해야 해요.

이 연습은 강의의 일부입니다

SQL Server에서의 시계열 분석

강의 보기

연습 안내

  • PERCENTILE_CONT()의 누락된 값을 채우세요.
  • WITHIN GROUP() 절 안에서는 사건 수를 내림차순으로 정렬하세요.
  • OVER() 절에서는 IncidentType(ID가 아니라 실제 텍스트 값)으로 파티션을 나누세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

SELECT DISTINCT
	it.IncidentType,
	AVG(CAST(ir.NumberOfIncidents AS DECIMAL(4,2)))
	    OVER(PARTITION BY it.IncidentType) AS MeanNumberOfIncidents,
    --- Fill in the missing value
	PERCENTILE_CONT(___)
    	-- Inside our group, order by number of incidents DESC
    	WITHIN GROUP (ORDER BY ir.___ DESC)
        -- Do this for each IncidentType value
        OVER (PARTITION BY it.___) AS MedianNumberOfIncidents,
	COUNT(1) OVER (PARTITION BY it.IncidentType) AS NumberOfRows
FROM dbo.IncidentRollup ir
	INNER JOIN dbo.IncidentType it
		ON ir.IncidentTypeID = it.IncidentTypeID
	INNER JOIN dbo.Calendar c
		ON ir.IncidentDate = c.Date
WHERE
	c.CalendarQuarter = 2
	AND c.CalendarYear = 2020;
코드 편집 및 실행