Video thumbnail

    Função Row Number no SQL Server

    A função ROW_NUMBER() no SQL Server, introduzida na versão de SQL Server 2005, é uma ferramenta poderosa para atribuir um número sequencial a cada linha em um conjunto de resultados. Essa função é particularmente útil em cenários onde é necessário identificar e manipular linhas com base em sua ordem ou em grupos específicos de dados. A cláusula ORDER BY é obrigatória para definir a ordem em que os números de linha são atribuídos, enquanto a cláusula PARTITION BY é opcional e resetará a contagem para um (1) cada vez que a partição mudar. Um dos casos de uso mais eficazes da função ROW_NUMBER() é a deleção de linhas duplicadas, mantendo apenas uma ou um número específico de ocorrências, o que facilita a manutenção da integridade e limpeza dos dados em tabelas.

    A Função ROW_NUMBER()

    A função ROW_NUMBER() retorna um número sequencial para cada linha, começando em um (1). Ela exige a cláusula ORDER BY para determinar a ordem de atribuição dos números e pode usar a cláusula PARTITION BY para reiniciar a contagem em subconjuntos de dados. Quando a cláusula PARTITION BY é utilizada, a numeração sequencial é reiniciada para um (1) sempre que a partição mudar, o que é útil para análises e manipulações de dados em grupos específicos.

    A função ROW_NUMBER() foi introduzida no SQL Server 2005. Ela retorna o número sequencial de uma linha começando em um. A cláusula Order By é obrigatória. A cláusula Partition By é opcional. Quando os dados são particionados, o número da linha é resetado para um quando a partição muda.

    Sintaxe e Exemplo Básico

    A sintaxe básica para ROW_NUMBER() é ROW_NUMBER() OVER (ORDER BY coluna).

    Por exemplo, ao selecionar funcionários e adicionar um número de linha ordenado por gênero:

    SELECT Nome, Genero, Salario,
    ROW_NUMBER() OVER (ORDER BY Genero) AS NumeroLinha
    FROM Funcionarios;
    

    Este comando adiciona uma coluna "NumeroLinha" que atribui um número sequencial a cada linha, baseado na ordem alfabética do gênero. A cláusula ORDER BY é fundamental, pois sem ela, o SQL Server retornará um erro, pois a função precisa de uma ordem para gerar os números sequenciais de forma consistente.

    Uso com PARTITION BY

    A cláusula PARTITION BY permite que a numeração seja reiniciada para cada grupo de dados. Se particionarmos os dados por gênero e ordenarmos por gênero, o número da linha será reiniciado para cada gênero:

    SELECT Nome, Genero, Salario,
    ROW_NUMBER() OVER (PARTITION BY Genero ORDER BY Genero) AS NumeroLinha
    FROM Funcionarios;
    

    Neste caso, as linhas para funcionários do gênero "Feminino" terão números de 1 a N, e as linhas para funcionários do gênero "Masculino" também começarão de 1 a N, com a contagem reiniciada para cada partição.

    Quando os dados são particionados, observe as primeiras quatro linhas, isso é a partição de funcionários femininos, então o número da linha começou em 1 e foi até 4, e aqui estamos mudando a partição de feminino para masculino, então na linha de número cinco, observe o que aconteceu com o número da linha, ele foi resetado para 1. E então ele vai até seis, então sempre que a partição muda, o número da linha é resetado para 1.

    Caso de Uso: Deletar Linhas Duplicadas

    Um dos usos mais práticos da função ROW_NUMBER() é a exclusão de linhas duplicadas, mantendo apenas uma ocorrência. Isso é frequentemente realizado em conjunto com Common Table Expressions (CTEs).

    Suponha que temos uma tabela Funcionarios com várias linhas duplicadas. Para remover todos os duplicados, exceto um, podemos usar o seguinte script:

    WITH EmployeeCTE AS
    (
        SELECT *,
        ROW_NUMBER() OVER (PARTITION BY ID, Nome, Genero, Salario ORDER BY ID) AS NumeroDaLinha
        FROM Funcionarios
    )
    DELETE FROM EmployeeCTE WHERE NumeroDaLinha > 1;
    

    Esta CTE cria uma partição para cada conjunto de colunas (ID, Nome, Gênero, Salário) e atribui um número de linha. Em seguida, a instrução DELETE remove todas as linhas onde o NumeroDaLinha é maior que 1, efetivamente deixando apenas uma ocorrência de cada registro duplicado. Se a intenção for manter duas duplicatas, a condição pode ser alterada para WHERE NumeroDaLinha > 2.

    Este método é eficiente e seguro para garantir a unicidade dos registros em uma tabela, sendo uma técnica comum em tarefas de limpeza e manutenção de dados.

    Takeaways

    1. Introdução e Requisito: A função ROW_NUMBER(), introduzida no SQL Server 2005, atribui um número sequencial a cada linha. A cláusula ORDER BY é obrigatória para definir a ordem de numeração, sem ela a consulta retornará um erro.
    2. PARTITION BY (Opcional): A cláusula PARTITION BY é opcional e reinicia a contagem da ROW_NUMBER() para 1 sempre que os valores nas colunas especificadas na partição mudam, permitindo a numeração dentro de grupos de dados.
    3. Deleção de Duplicatas: Um dos principais casos de uso da ROW_NUMBER() é a remoção de linhas duplicadas, mantendo apenas uma (ou um número específico) ocorrência. Isso é feito particionando os dados pelas colunas que definem a duplicidade e excluindo as linhas com NumeroDaLinha > 1 dentro de uma CTE (Common Table Expression).
    4. Flexibilidade na Deleção: Ao usar a ROW_NUMBER() para remover duplicatas, é possível ajustar a condição (por exemplo, NumeroDaLinha > 2) para manter um número específico de registros duplicados, se necessário.

    References

    This article was AI generated. It may contain errors and should be verified with the original source.
    VideoToWordsClarifyTube

    © 2025 ClarifyTube. All rights reserved.