НачатьНачать бесплатно

Вычисление медианы в SQL Server

В SQL Server нет функции MEDIAN(). Ближайшим аналогом является PERCENTILE_CONT(), которая находит значение на заданном процентиле в наборе данных.

Мы хотим выяснить, насколько медиана отличается от среднего значения для каждого типа инцидента в нашем сводном наборе. Для этого можно сравнить функцию AVG() из предыдущего упражнения с PERCENTILE_CONT(). Это оконные функции, которые мы подробнее рассмотрим в главе 4. Пока важно знать, что PERCENTILE_CONT() принимает один параметр — значение процентиля (десятичное число от 0. до 1.). Процентиль должен быть указан внутри упорядоченной группы в предложении WITHIN GROUP, а в предложении OVER можно задать раздел для разбиения данных. В секции WITHIN GROUP необходимо выполнить сортировку по столбцу, для которого вы хотите найти 50-й процентиль.

Это упражнение является частью курса

Анализ временных рядов в SQL Server

Посмотреть курс

Инструкции к упражнению

  • Укажите недостающее значение для PERCENTILE_CONT().
  • Внутри предложения WITHIN GROUP() выполните сортировку по количеству инцидентов в порядке убывания.
  • В предложении OVER() выполните разбиение по IncidentType (по текстовому значению, а не по идентификатору).

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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;
Редактировать и запускать код