SQL: A função Row Number [2/5]
Aumentando o cinto de utilidades em SQL para Análise de Dados
Conforme comentei no meu artigo anterior, estou trazendo para o blog alguns comandos em SQL que são muito úteis para Análise de Dados no dia a dia. Caso não tenha visto, me refiro ao artigo em que escrevi sobre as funções Greatest and Least.
O que é o comando Row Number?
De forma objetiva, o Row Number enumera o resultado de uma query.
Seguindo o mesmo contexto do artigo anterior, vamos pensar em um exemplo com a base do Spotify. Os dados tem essa aparência:
Vamos supor que queremos enumerar as músicas, para cada artista, da mais dançante para a menos dançante. A query fica assim:
Destrinchando um pouco a query:
- ROW_NUMBER(): A primeira declaração anuncia o uso da contagem e obrigatoriamente exige o uso do OVER() logo em seguida
- OVER(): esta é uma expressão obrigatória que vem após a declaração do ROW_NUMBER(). Quando a usamos, é como se estivéssemos dizendo "Quero que o resultado seja contado sobre as regras desta expressão que escreverei dentro do parêntese"
- PARTITION BY: Este comando indica quando a contagem deve ser reiniciada. Então, como no exemplo, se o campo artists possui valores como Ed Sheeran, Ariana Grande, Drake, etc., ele se guiará por esses nomes para iniciar e finalizar a contagem
- ORDER BY: Comando obrigatório que usamos para indicar por qual ordem a contagem deve se guiar. No caso do exemplo, utilizamos o danceability como ordem para contarmos os registros, e assim tivemos as músicas ordenadas das mais dançantes para as menos dançantes de cada artista.
Próximos Passos
O Row Number é bastante utilizado quando precisamos enumerar sequencialmente o resultado de uma query. No meu dia a dia, já utilizei bastante esse comando quando precisava deduplicar dados — por exemplo, todos os valores de duas tuplas eram idênticos, mas o que mudava era apenas o campo de timestamp,e precisávamos de apenas uma dessas tuplas.
Apesar de não ser o foco do artigo, vale ressaltar que o Row Number não é a mesma coisa que a função Rank. Enquanto a primeira retorna um número único mesmo que as tuplas sejam idênticas (a atribuição é feita aleatoriamente), a segunda retorna números repetidos quando as tuplas são idênticas.
Se você se interessa pelo tipo de assunto abordado neste post, no próximo falaremos sobre mais duas funções muito úteis em SQL: Coalesce e NVL.
Referências
[2] ROW_NUMBER — Documentação Oficial da Microsoft