Sobes.tech
Middle

Para que são usadas as funções de janela em SQL?

sobes.tech IA

Resposta da IA

As funções de janela em SQL realizam agregações de dados num conjunto de linhas relacionadas com a linha atual, mas sem agrupar o conjunto de resultados. Isto permite realizar cálculos como somas acumuladas, médias móveis ou classificação, mantendo todas as linhas da consulta original.

Os principais objetivos do uso de funções de janela:

  • Classificação: Atribuir uma classificação a cada linha numa janela determinada.
    -- Obter a classificação dos funcionários por salário dentro de cada departamento
    SELECT
        employee_name,
        salary,
        department,
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) as department_rank
    FROM
        employees;
    
  • Cálculo de estatísticas por grupo de linhas sem agrupamento: Agregação de dados dentro de uma "janela" de linhas, mantendo a granularidade ao nível de linha.
    -- Calcular o salário médio por todo o departamento para cada linha
    SELECT
        employee_name,
        salary,
        department,
        AVG(salary) OVER (PARTITION BY department) as avg_department_salary
    FROM
        employees;
    
  • Comparação da linha atual com outras linhas na janela: Acesso a dados de linhas anteriores ou posteriores na janela.
    -- Obter o salário do funcionário anterior no departamento em ordem decrescente de salário
    SELECT
        employee_name,
        salary,
        department,
        LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) as previous_salary
    FROM
        employees;
    
  • Cálculos com soma acumulada: Cálculo de somas, médias e outras agregações acumulando do início.
    -- Calcular a soma acumulada de vendas por data
    SELECT
        sale_date,
        amount,
        SUM(amount) OVER (ORDER BY sale_date) as cumulative_sales
    FROM
        sales;
    

Ao contrário das funções de agregação normais (GROUP BY), as funções de janela não colapsam linhas, tornando-as uma ferramenta poderosa para consultas analíticas e análise detalhada de dados.