ПочатиПочніть безкоштовно

Порівняння 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;
Редагувати та запускати код