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

Сравнение ROW_NUMBER(), RANK() и DENSE_RANK()

Среди оконных функций ранжирования наиболее часто используется ROW_NUMBER(), за ней следуют RANK() и DENSE_RANK(). Каждая из этих функций (как и NTILE()) предлагает свой способ ранжирования записей в SQL Server.

В этом упражнении мы хотим определить, как часто в нашем наборе данных встречается тип инцидента 3. Необходимо упорядочить количество инцидентов по убыванию: дата с наибольшим числом инцидентов должна получить номер строки, ранг и плотный ранг, равные 1, и так далее. Для наглядности мы будем рассматривать только те даты, где зафиксировано не менее 8 инцидентов.

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

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

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

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

  • Заполните каждую оконную функцию в соответствии с псевдонимом столбца. Используйте ROW_NUMBER(), RANK() и DENSE_RANK() ровно по одному разу.
  • Заполните предложение OVER, задав сортировку по ir.NumberOfIncidents в порядке убывания.

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

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

SELECT
	ir.IncidentDate,
	ir.NumberOfIncidents,
    -- Fill in each window function and ordering
    -- Note that all of these are in descending order!
	___() OVER (___ ___ ir.NumberOfIncidents ___) AS rownum,
	___() OVER (___ ___ ir.NumberOfIncidents ___) AS rk,
	___() OVER (___ ___ ir.NumberOfIncidents ___) AS dr
FROM dbo.IncidentRollup ir
WHERE
	ir.IncidentTypeID = 3
	AND ir.NumberOfIncidents >= 8
ORDER BY
	ir.NumberOfIncidents DESC;
Редактировать и запускать код