Contrastando ROW_NUMBER(), RANK() e DENSE_RANK()
Entre as funções de janela de classificação, ROW_NUMBER() é a mais comum, seguida por RANK() e DENSE_RANK(). Cada uma dessas funções de classificação (assim como NTILE()) oferece uma forma diferente de ranquear registros no SQL Server.
Neste exercício, queremos descobrir com que frequência vemos o tipo de incidente 3 no nosso conjunto de dados. Queremos classificar o número de incidentes em ordem decrescente, de modo que a data com o maior número de incidentes receba número da linha, rank e dense rank iguais a 1, e assim por diante. Para facilitar o acompanhamento, vamos incluir apenas as datas com pelo menos 8 incidentes.
Este exercício faz parte do curso
Análise de Séries Temporais no SQL Server
Instruções do exercício
- Preencha cada função de janela com base no alias da coluna. Você deve incluir
ROW_NUMBER(),RANK()eDENSE_RANK()exatamente uma vez. - Preencha a cláusula
OVERordenando porir.NumberOfIncidentsem ordem decrescente.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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;