Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Funções de Janela | Alguns Tópicos Adicionais
Otimização de SQL e Recursos de Consulta

Funções de Janela

Deslize para mostrar o menu

Funções de janela são uma categoria de funções SQL que realizam cálculos sobre um conjunto de linhas relacionadas à linha atual dentro de uma janela ou partição definida.
São utilizadas para realizar cálculos e análises sobre um subconjunto de linhas sem reduzir o conjunto de resultados, diferentemente das funções de agregação que normalmente reduzem o número de linhas retornadas por uma consulta.

Explicação

Considere a seguinte tabela Sales:

12
SELECT * FROM sales

Se nosso objetivo é calcular a receita total para cada produto específico e exibi-la em uma coluna adicional dentro da tabela principal, em vez de gerar uma nova tabela agrupada, o resultado pode ser semelhante ao seguinte:

Mas como podemos fazer isso?
Usar GROUP BY não é adequado para essa tarefa porque essa cláusula reduz o número de linhas ao agrupá-las de acordo com critérios especificados, resultando apenas nos IDs e seus respectivos valores somados sendo retornados.

É por isso que as funções de janela são essenciais para resolver esse problema.

Implementação

Podemos obter o resultado necessário usando a seguinte consulta:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Descrição da Consulta
expand arrow
  • Nome da função: SUM
  • Descrição: Calcula a soma de uma coluna especificada dentro de uma janela definida.
  • Argumentos:
    • Amount: A coluna a ser somada.
  • Função de janela:
    • OVER: Especifica a janela sobre a qual a agregação é realizada.
    • PARTITION BY Product_ID: Divide o conjunto de resultados em partições com base nos valores da coluna Product_ID. A soma é calculada separadamente para cada partição.
  • Apelido: Total_Revenue_Per_Product: O nome atribuído à soma calculada para cada partição.
  • Uso: Esta função é utilizada para calcular a receita total por produto, somando os valores para cada Product ID.
  • Resultado: O conjunto de resultados inclui as colunas Sales_ID, Product_ID, Sales_Date, Amount e Total_Revenue_Per_Product da tabela sales, onde Total_Revenue_Per_Product representa a receita total para cada Product ID.
  • Ordenação: O conjunto de resultados é ordenado por Sales_Date.

Uma sintaxe geral para criar uma função de janela pode ser descrita da seguinte forma:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: indica que uma consulta está prestes a começar;
  • aggregation_func(): a função de agregação (por exemplo, SUM, AVG, COUNT) que realiza um cálculo sobre um conjunto de linhas definido pela janela;
  • OVER: palavra-chave que introduz a função de janela;
  • PARTITION BY: divide o conjunto de resultados em partições com base nos valores das colunas especificadas. A função de janela opera separadamente em cada partição;
    • partition_column: a coluna utilizada para particionar o conjunto de resultados.
  • ORDER BY: especifica a ordem das linhas dentro de cada partição;
    • order_column: a coluna utilizada para ordenar as linhas dentro de cada partição.
  • FROM: indica a tabela de origem da qual os dados são recuperados;
    • table_name: o nome da tabela da qual os dados estão sendo selecionados.
question mark

Qual cláusula é usada para definir a partição de uma função de janela?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Funções de Janela

Funções de janela são uma categoria de funções SQL que realizam cálculos sobre um conjunto de linhas relacionadas à linha atual dentro de uma janela ou partição definida.
São utilizadas para realizar cálculos e análises sobre um subconjunto de linhas sem reduzir o conjunto de resultados, diferentemente das funções de agregação que normalmente reduzem o número de linhas retornadas por uma consulta.

Explicação

Considere a seguinte tabela Sales:

12
SELECT * FROM sales

Se nosso objetivo é calcular a receita total para cada produto específico e exibi-la em uma coluna adicional dentro da tabela principal, em vez de gerar uma nova tabela agrupada, o resultado pode ser semelhante ao seguinte:

Mas como podemos fazer isso?
Usar GROUP BY não é adequado para essa tarefa porque essa cláusula reduz o número de linhas ao agrupá-las de acordo com critérios especificados, resultando apenas nos IDs e seus respectivos valores somados sendo retornados.

É por isso que as funções de janela são essenciais para resolver esse problema.

Implementação

Podemos obter o resultado necessário usando a seguinte consulta:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Descrição da Consulta
expand arrow
  • Nome da função: SUM
  • Descrição: Calcula a soma de uma coluna especificada dentro de uma janela definida.
  • Argumentos:
    • Amount: A coluna a ser somada.
  • Função de janela:
    • OVER: Especifica a janela sobre a qual a agregação é realizada.
    • PARTITION BY Product_ID: Divide o conjunto de resultados em partições com base nos valores da coluna Product_ID. A soma é calculada separadamente para cada partição.
  • Apelido: Total_Revenue_Per_Product: O nome atribuído à soma calculada para cada partição.
  • Uso: Esta função é utilizada para calcular a receita total por produto, somando os valores para cada Product ID.
  • Resultado: O conjunto de resultados inclui as colunas Sales_ID, Product_ID, Sales_Date, Amount e Total_Revenue_Per_Product da tabela sales, onde Total_Revenue_Per_Product representa a receita total para cada Product ID.
  • Ordenação: O conjunto de resultados é ordenado por Sales_Date.

Uma sintaxe geral para criar uma função de janela pode ser descrita da seguinte forma:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: indica que uma consulta está prestes a começar;
  • aggregation_func(): a função de agregação (por exemplo, SUM, AVG, COUNT) que realiza um cálculo sobre um conjunto de linhas definido pela janela;
  • OVER: palavra-chave que introduz a função de janela;
  • PARTITION BY: divide o conjunto de resultados em partições com base nos valores das colunas especificadas. A função de janela opera separadamente em cada partição;
    • partition_column: a coluna utilizada para particionar o conjunto de resultados.
  • ORDER BY: especifica a ordem das linhas dentro de cada partição;
    • order_column: a coluna utilizada para ordenar as linhas dentro de cada partição.
  • FROM: indica a tabela de origem da qual os dados são recuperados;
    • table_name: o nome da tabela da qual os dados estão sendo selecionados.
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 2
some-alt