SQL: A função Row Number [2/5]

Aumentando o cinto de utilidades em SQL para Análise de Dados

Erica Bertan
Computando Arte
3 min readAug 30, 2021

--

Photo by Nick Hillier on Unsplash

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:

Dados de músicas, artistas e seu "índice dançante" no Spotify. Fonte: própria.

Vamos supor que queremos enumerar as músicas, para cada artista, da mais dançante para a menos dançante. A query fica assim:

Para os fãs do Ed Sheeran, fez sentido? 😃

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

[1] O que é Row Number?

[2] ROW_NUMBER — Documentação Oficial da Microsoft

[3] SQL RANK() versus ROW_NUMBER()

--

--

Erica Bertan
Computando Arte

Love to learn and sometimes I write when I’m inspired. Data Engineer @ Loggi