20th Jul 2022 6 minutos de leitura Qual é a função do RANK() em SQL, e como você a utiliza? Kateryna Koidan sql aprender sql rank prática on-line window functions Índice RANK() Introdução à função Ranking básico Ranking dentro de diferentes grupos Outras Funções de Ranking em SQL Tempo para praticar as funções de ranking! Quem são seus 10 principais clientes? Quem são os funcionários com melhor desempenho em cada departamento? Para responder perguntas como estas, você precisará classificar a saída de sua consulta SQL. Vamos ver como a função RANK() auxilia na classificação dos resultados em SQL. Há muitos casos de uso em que você pode precisar classificar as linhas em SQL. Você pode querer classificar clientes com base no volume de vendas, estudantes com base nos resultados de seus exames, ativos da empresa com base em seu valor atual, departamentos com base no número de funcionários, ou usuários com base na data de sua inscrição. A classificação é uma ferramenta importante e comum na análise de dados. Neste tutorial, vou fornecer explicações detalhadas de como classificar as linhas em SQL. RANK() Introdução à função A função RANK() é uma das funções de janela em SQL. As funções de janela olham parte dos dados e computam os resultados para esta parte. A função RANK(), especificamente, atribui uma classificação a cada linha com base em uma coluna fornecida. RANK() está incluída na declaração SELECT com a seguinte sintaxe: RANK() OVER (ORDER BY column ASC|DESC) Basicamente, você adiciona outra coluna ao seu conjunto de resultados. Esta coluna inclui a classificação de cada registro com base na ordem especificada após a palavra-chave ORDER BY. Isto implica especificar (1) a coluna a ser usada para ordenar as linhas e (2) se a ordem deve ser ascendente ou descendente. A primeira linha recebe a classificação 1, e as linhas seguintes recebem classificações mais altas. Se alguma linha tiver o mesmo valor na coluna usada para ordenação, ela é classificada da mesma forma. A função RANK() deixa lacunas em tais casos. Por exemplo, se a primeira e a segunda linhas tiverem o mesmo valor na coluna fornecida, ambas obtêm a classificação 1. Em seguida, a terceira linha recebe a classificação 3 (ou seja, faltará a classificação 2). Para ficar confiante com a função RANK(), confira nossa Funções de Janela (Window Functions) em SQL curso. Também cobre outras funções de classificação que têm abordagens diferentes para processar os mesmos valores na coluna fornecida. Agora, vamos ver a função RANK() em ação. Ranking básico Para ver como a função RANK() funciona na prática, vamos passar por um exemplo. Vamos imaginar que temos uma equipe de desenvolvedores. Queremos classificá-los com base em sua experiência. Aqui está a tabela com a qual começamos: developers idfirst_namelast_namelevelyears_experience 10JackDavisjunior1 11HelenBrownjunior0 12KateWilliamssenior4 13AlexMillersenior8 14SophiaMooremid-level3 15NickJacksonmid-level3 16StevenMartinjunior2 17MeganStevensjunior1 18JohnJonessenior5 19MaxWebermid-level4 Agora, nossa tarefa é mostrar o primeiro nome, sobrenome, nível de senioridade, anos de experiência e classificação dos desenvolvedores. Queremos que o desenvolvedor mais experiente consiga a classificação 1. Aqui está nossa consulta SQL junto com o conjunto de resultados: SELECT first_name, last_name, level, years_experience, RANK() OVER (ORDER BY years_experience DESC) FROM developers; first_namelast_namelevelyears_experiencerank AlexMillersenior81 JohnJonessenior52 MaxWebermid-level43 KateWilliamssenior43 NickJacksonmid-level35 SophiaMooremid-level35 StevenMartinjunior27 MeganStevensjunior18 JackDavisjunior18 HelenBrownjunior010 Para classificar os desenvolvedores com base em sua experiência, incluímos o seguinte campo na declaração SELECT: RANK() OVER (ORDER BY years_experience DESC) Definimos a ordem após a cláusula ORDER BY, especificando a coluna a ser usada para classificação (years_experience) e a ordem (decrescente). Em seguida, classificamos os desenvolvedores com base nesta ordem. Vemos que o desenvolvedor com 8 anos de experiência obtém a classificação 1, o desenvolvedor com 5 anos de experiência obtém a classificação 2, e os dois desenvolvedores com 4 anos de experiência ambos obtêm a classificação 3. Observe que a função RANK() deixa uma lacuna aqui, e os desenvolvedores seguintes recebem a classificação 5 (ou seja, a classificação 4 está faltando). Agora você tem uma idéia de como a função RANK() funciona, incluindo como ela processa os mesmos valores na coluna usada para a classificação. Você pode encontrar mais casos de uso neste guia completo de linhas de classificação em SQL. Agora, vamos passar a exemplos mais avançados. Ranking dentro de diferentes grupos Em nosso primeiro exemplo, classificamos todo o conjunto de resultados. Agora, digamos que queremos ter uma classificação separada para cada um dos níveis de senioridade (ou seja, júnior, médio e sénior). Com a função RANK() em SQL, podemos fazer isso adicionando a palavra-chave PARTITION BY e especificando a coluna a ser usada para agrupar os registros. Aqui está nossa consulta SQL: SELECT first_name, last_name, level, years_experience, RANK() OVER (PARTITION BY level ORDER BY years_experience DESC) FROM developers; Na cláusula OVER(), primeiro definimos como agrupar os registros (usando a coluna level ) e depois definimos como ordenar os registros dentro destes grupos (com base nos anos de experiência, a partir do desenvolvedor mais experiente). Aqui está a tabela resultante: first_namelast_namelevelyears_experiencerank StevenMartinjunior21 JackDavisjunior12 MeganStevensjunior12 HelenBrownjunior04 MaxWebermid-level41 NickJacksonmid-level32 SophiaMooremid-level32 AlexMillersenior81 JohnJonessenior52 KateWilliamssenior43 Observe que temos classificações separadas para os níveis júnior, intermediário e sênior. Ainda assim, o desenvolvedor mais experiente em cada grupo obtém a classificação 1, e os desenvolvedores com menos experiência obtêm classificações mais altas. Observe também que enquanto Kate Williams e Max Weber têm os mesmos 4 anos de experiência, Max recebe a classificação 1 como a desenvolvedora de nível médio mais experiente, enquanto Kate recebe a classificação 3 como a desenvolvedora sênior menos experiente. Agora que você sabe como funciona PARTITION BY, é hora de aprender sobre outras funções de ranking. Outras Funções de Ranking em SQL Para classificar as linhas em SQL, você também pode usar as funções DENSE_RANK() e ROW_NUMBER(). A diferença está na maneira como estas funções lidam com os mesmos valores. Como aprendemos anteriormente, a função RANK() dá a mesma classificação aos registros com o mesmo valor e deixa uma lacuna para contabilizar estes registros. Em contraste, a função : a função DENSE_RANK() não deixa uma lacuna; a função ROW_NUMBER() classifica todos os registros de forma diferente, mesmo que os valores sejam os mesmos. É mais fácil entender esta diferença com um exemplo. Portanto, vamos voltar ao nosso primeiro caso de uso, no qual classificamos todo o conjunto de resultados. Mas, desta vez, usaremos também DENSE_RANK() e ROW_NUMBER(): SELECT first_name, last_name, level, years_experience, RANK() OVER (ORDER BY years_experience DESC), DENSE_RANK() OVER (ORDER BY years_experience DESC), ROW_NUMBER() OVER (ORDER BY years_experience DESC) FROM developers; first_namelast_namelevelyears_experiencerankdense_rankrow_number AlexMillersenior8111 JohnJonessenior5222 MaxWebermid-level4333 KateWilliamssenior4334 NickJacksonmid-level3545 SophiaMooremid-level3546 StevenMartinjunior2757 MeganStevensjunior1868 JackDavisjunior1869 HelenBrownjunior010710 Semelhante à função RANK(), a função DENSE_RANK() dá a mesma classificação aos desenvolvedores com os mesmos anos de experiência (por exemplo, classificação 3 para Kate Williams e Max Weber). Entretanto, a próxima posição na coluna dense_rank é 4, não deixando lacunas no ranking. Por outro lado, a função ROW_NUMBER() atribui um número diferente a todos os desenvolvedores, incluindo os que têm os mesmos anos de experiência. Então, por que Max obtém a classificação 3 e Kate a classificação 4? É uma escolha arbitrária, e nunca se sabe qual dos registros com o mesmo valor receberá uma classificação mais alta. Agora que você sabe a diferença entre as funções de classificação, você pode decidir qual delas é mais adequada para seus casos de uso. Se você não tiver certeza, veja mais exemplos das funções RANK(), DENSE_RANK(), e ROW_NUMBER() neste artigo geral. Tempo para praticar as funções de ranking! As funções de classificação estão entre as ferramentas mais comuns utilizadas pelos analistas de dados. Portanto, você deve se sentir confiante com o ranking em SQL. E a confiança vem com a prática. Confira isto Funções de Janela (Window Functions) em SQL curso que inclui 218 exercícios interativos cobrindo funções de classificação, funções analíticas, computação de estatísticas avançadas com diferentes quadros de janela, etc. Você pode saber mais sobre o curso neste artigo. E aqui está um bônus: este SQL Funções de Janela (Window Functions) em SQL Cheat Sheet de 2 páginas ajudará você a praticar a classificação e outras funções de janela. Obrigado pela leitura, e feliz aprendizado! Tags: sql aprender sql rank prática on-line window functions