Порівняння 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;