Сравнение 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;