logotipo Blog Giovani Da Cruz
Banco de Dados

Aproveitando o Poder da Função OVER no SQL para Análise de Dados

4 min de leitura 165 visualizações

Over and Partition by in SQL

Fala galera da programação, tudo beleza?

O objetivo de hoje é aprenda a utilizar a função OVER para combinar dados individuais com agregações de maneira eficiente. Veja como gerar descrições detalhadas das parcelas de pedidos e torne seus relatórios financeiros mais claros e compreensíveis!

 

Introdução

A função OVER no SQL é uma ferramenta poderosa que permite realizar cálculos avançados ao juntar informações do registro atual com o total de registros em uma determinada partição. Esta funcionalidade é especialmente útil em cenários onde precisamos comparar ou combinar dados individuais com agregações, como no caso de parcelas de pedidos.

 

Estrutura da Tabela

Considere a seguinte tabela pedido_parcela:

CREATE TABLE pedido_parcela (
    cod_pedido INTEGER,
    seq INTEGER,
    valor DOUBLE,
    vencimento DATE
);

Objetivo

Vamos utilizar a função OVER para criar uma descrição detalhada das parcelas, como “Parcela 01 de 03”. Isso nos permitirá visualizar cada parcela junto com o total de parcelas de um pedido.

 

Solução

A função OVER pode ser combinada com outras funções agregadas, como COUNT, para calcular o total de parcelas por pedido e concatenar essa informação com a sequência da parcela atual.

 

Consulta SQL

Aqui está a consulta SQL que utiliza a função OVER para atingir nosso objetivo:

SELECT 
    cod_pedido,
    seq,
    valor,
    vencimento,
    'Parcela ' || seq || ' de ' || total_parcelas AS descricao_parcela
FROM (
    SELECT 
        cod_pedido,
        seq,
        valor,
        vencimento,
        COUNT(*) OVER (PARTITION BY cod_pedido) AS total_parcelas
    FROM 
        pedido_parcela
) AS subquery
ORDER BY cod_pedido, seq;

Explicação do Código

  1. Função OVER: Utilizamos COUNT(*) OVER (PARTITION BY cod_pedido) para contar o número total de parcelas para cada pedido (cod_pedido). A cláusula PARTITION BY divide os dados em partições baseadas no cod_pedido.
  2. Concatenar Strings: No SELECT externo, concatenamos seq e total_parcelas para formar a descrição “Parcela X de Y”.
  3. Organização dos Resultados: Ordenamos os resultados por cod_pedido e seq para garantir que as parcelas estejam na ordem correta.

Resultado

Ao executar essa consulta, você obterá algo parecido com:

[table id=4 /]

 

Compatibilidade

O SQL que utiliza a função OVER para calcular agregações por partições é compatível com vários sistemas de gerenciamento de banco de dados (SGBDs) modernos. Aqui estão alguns dos SGBDs que suportam esse tipo de consulta:

  1. PostgreSQL: Suporta funções de janela incluindo OVER e PARTITION BY.
  2. FirebirdSQL: A partir da versão 3.0, o Firebird suporta funções de janela.
  3. MySQL: A partir da versão 8.0, MySQL suporta funções de janela.
  4. MariaDB: A partir da versão 10.2, MariaDB suporta funções de janela.
  5. Microsoft SQL Server: Suporta funções de janela a partir do SQL Server 2005.
  6. Oracle: Suporta funções de janela desde versões bem anteriores.
  7. SQLite: Suporta funções de janela a partir da versão 3.25.0.
  8. IBM Db2: Suporta funções de janela.
  9. SAP HANA: Suporta funções de janela.

Considerações Específicas

  • PostgreSQL: Totalmente compatível com a sintaxe apresentada.
  • MySQL/MariaDB: Certifique-se de estar usando uma versão que suporte funções de janela (8.0+ para MySQL, 10.2+ para MariaDB).
  • SQL Server: A sintaxe é compatível, mas lembre-se de que o || para concatenação de strings precisa ser substituído por +.
  • Oracle: A sintaxe é compatível, e a concatenação pode usar ||.
  • SQLite: Certifique-se de usar a versão 3.25.0 ou superior para suporte a funções de janela.

Consulta Ajustada para SQL Server

Se você estiver usando SQL Server, a consulta precisa de um pequeno ajuste para a concatenação de strings:

SELECT 
    cod_pedido,
    seq,
    valor,
    vencimento,
    'Parcela ' + CAST(seq AS VARCHAR) + ' de ' + CAST(total_parcelas AS VARCHAR) AS descricao_parcela
FROM (
    SELECT 
        cod_pedido,
        seq,
        valor,
        vencimento,
        COUNT(*) OVER (PARTITION BY cod_pedido) AS total_parcelas
    FROM 
        pedido_parcela
) AS subquery
ORDER BY cod_pedido, seq;

 

 

Conclusão

A função OVER no SQL é uma ferramenta essencial para realizar cálculos complexos que envolvem dados agregados e individuais. Ela permite, de maneira eficiente, juntar o registro atual com o total de registros em uma partição, proporcionando uma visão detalhada e completa dos dados. Aproveitar essa função pode simplificar significativamente a forma como você apresenta e analisa informações em seu banco de dados.

 

Beleza pessoal? Espero que possa ajudar!

 

Dúvidas ou sugestões? Deixe o seu comentário.

 

Lembra-se de assinar a nossa Newsletter para receber notificações sobre os nossos novos assuntos.

 

Compartilhe este conteúdo, assim o conhecimento pode chegar a mais pessoas.

 

Um abraço e até o próximo post. Valeu!

 

#SQL

#DataAnalysis

#BancoDeDados

#DicasDeSQL

#DesenvolvimentoDeSoftware

#GiovaniDaCruz

 

Deixe um comentário

Seu e-mail não será publicado.