Pergunta de entrevista para Analista de Dados

Explique a diferença entre ROW_NUMBER, RANK e DENSE_RANK.

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Os três numeram linhas dentro de uma janela. O ROW_NUMBER dá a cada linha um número sequencial único, então os empates são desfeitos de forma arbitrária. O RANK dá o mesmo número às linhas empatadas e depois pula adiante, produzindo 1, 2, 2, 4. O DENSE_RANK dá o mesmo número às empatadas sem pular, produzindo 1, 2, 2, 3. Use ROW_NUMBER para deduplicação e RANK ou DENSE_RANK para rankings de verdade.

Por que os entrevistadores perguntam isso

É um teste rápido e inequívoco de fluência em SQL, sem espaço para enrolar, e o desdobramento prático importa tanto quanto: escolher uma linha por grupo é tarefa de todo dia e o ROW_NUMBER é a ferramenta certa para isso. Os entrevistadores também querem que você note que o ROW_NUMBER não é determinístico em empates, a não ser que o seu ORDER BY inclua um critério de desempate explícito.

Como estruturar sua resposta

  • Diga o comportamento de numeração de cada um com o exemplo 1, 2, 2, 4.
  • Associe cada função à tarefa para a qual ela é a certa.
  • Alerte que o ROW_NUMBER em empates precisa de um critério de desempate determinístico.
  • Mostre o padrão clássico para pegar a linha mais recente por grupo.

Exemplo de resposta

Exemplo falado, em primeira pessoa

O ROW_NUMBER sempre dá inteiros distintos, então duas linhas empatadas ainda recebem 1 e 2 na ordem que o motor quiser. O RANK dá 1 para as duas e depois pula para 3. O DENSE_RANK dá 1 para as duas e continua no 2. Na prática eu uso ROW_NUMBER muito mais que os outros dois, porque o trabalho mais comum é deduplicação: particionar por customer_id, ordenar por updated_at decrescente e pegar onde row_number é igual a 1 para ter o registro mais recente por cliente. Se eu estou montando um top dez em que empates deveriam dividir a posição, aí é DENSE_RANK. A pegadinha do ROW_NUMBER é o determinismo. Se o updated_at é idêntico em duas linhas, qual delas você mantém pode mudar entre execuções, e eu já vi um dashboard oscilar entre dois valores exatamente por isso. Então eu adiciono uma segunda chave de ordenação, normalmente a chave primária, para deixar estável e reproduzível.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Como você pegaria os três principais produtos por categoria?
  • O que acontece com o ROW_NUMBER se duas linhas têm valores de ordenação idênticos?
  • Como o NTILE difere desses três?

Mais perguntas para Analista de Dados

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot