Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Tipos de Funções de Janela | Alguns Tópicos Adicionais
Técnicas Avançadas em SQL

bookTipos de Funções de Janela

Vamos explorar brevemente os principais tipos de funções de janela utilizadas em SQL.

Funções de agregação

Estas são as funções de agregação padrão (AVG, SUM, MAX, MIN, COUNT) utilizadas em um contexto de janela. Já utilizamos esse tipo de função de janela no capítulo anterior.

Funções de classificação

Funções de classificação em SQL são um tipo de função de janela que permite atribuir uma classificação a cada linha dentro de uma partição de um conjunto de resultados. Essas funções podem ser extremamente úteis para realizar cálculos e análises ordenadas.

  • RANK(): Atribui uma classificação única para cada linha distinta dentro da partição com base na cláusula ORDER BY. Linhas com valores iguais recebem a mesma classificação, deixando lacunas na sequência;

  • DENSE_RANK(): Semelhante ao RANK(), mas sem lacunas na sequência de classificação;

  • NTILE(n): Divide as linhas em uma partição ordenada em n grupos e atribui um número de grupo para cada linha.

Exemplo

Vamos classificar as vendas com base no Amount para cada ProductID em ordem crescente utilizando a função DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

A tabela de resultados contém todas as informações da tabela principal e uma coluna adicional que fornece a classificação de cada venda para o respectivo produto.

Funções de comparação de valores

Funções de comparação de valores em janela no SQL são utilizadas para comparar valores da linha atual com valores de outras linhas dentro da mesma partição.
Essas funções são especialmente úteis para tarefas que envolvem análise de tendências, cálculos baseados em linhas adjacentes ou acesso a valores específicos de linhas dentro de uma janela definida. Existem várias funções de comparação de valores em SQL:

  • LAG(): Recupera o valor de uma linha anterior no conjunto de resultados sem a necessidade de um self-join;
  • LEAD(): Recupera o valor de uma linha subsequente no conjunto de resultados sem a necessidade de um self-join;
  • FIRST_VALUE(): Retorna o valor da primeira linha na janela;
  • LAST_VALUE(): Retorna o valor da última linha na janela.

Exemplo

Vamos utilizar a função de janela de comparação de valores LAG() para calcular a variação no valor das vendas em relação à venda anterior para cada produto:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Como resultado, é possível extrair facilmente informações sobre as diferenças de vendas para cada produto específico sem utilizar subconsultas ou procedimentos armazenados.
Também é possível calcular as diferenças para todas as vendas sem particionamento utilizando a seguinte consulta:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Você pode notar que não incluímos a cláusula PARTITION BY no bloco OVER. Isso significa que não queremos obter os valores anteriores apenas para um produto específico, mas para todas as vendas na tabela.

question mark

O que a função 'NTILE()' faz no SQL?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

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

Awesome!

Completion rate improved to 4.35

bookTipos de Funções de Janela

Deslize para mostrar o menu

Vamos explorar brevemente os principais tipos de funções de janela utilizadas em SQL.

Funções de agregação

Estas são as funções de agregação padrão (AVG, SUM, MAX, MIN, COUNT) utilizadas em um contexto de janela. Já utilizamos esse tipo de função de janela no capítulo anterior.

Funções de classificação

Funções de classificação em SQL são um tipo de função de janela que permite atribuir uma classificação a cada linha dentro de uma partição de um conjunto de resultados. Essas funções podem ser extremamente úteis para realizar cálculos e análises ordenadas.

  • RANK(): Atribui uma classificação única para cada linha distinta dentro da partição com base na cláusula ORDER BY. Linhas com valores iguais recebem a mesma classificação, deixando lacunas na sequência;

  • DENSE_RANK(): Semelhante ao RANK(), mas sem lacunas na sequência de classificação;

  • NTILE(n): Divide as linhas em uma partição ordenada em n grupos e atribui um número de grupo para cada linha.

Exemplo

Vamos classificar as vendas com base no Amount para cada ProductID em ordem crescente utilizando a função DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

A tabela de resultados contém todas as informações da tabela principal e uma coluna adicional que fornece a classificação de cada venda para o respectivo produto.

Funções de comparação de valores

Funções de comparação de valores em janela no SQL são utilizadas para comparar valores da linha atual com valores de outras linhas dentro da mesma partição.
Essas funções são especialmente úteis para tarefas que envolvem análise de tendências, cálculos baseados em linhas adjacentes ou acesso a valores específicos de linhas dentro de uma janela definida. Existem várias funções de comparação de valores em SQL:

  • LAG(): Recupera o valor de uma linha anterior no conjunto de resultados sem a necessidade de um self-join;
  • LEAD(): Recupera o valor de uma linha subsequente no conjunto de resultados sem a necessidade de um self-join;
  • FIRST_VALUE(): Retorna o valor da primeira linha na janela;
  • LAST_VALUE(): Retorna o valor da última linha na janela.

Exemplo

Vamos utilizar a função de janela de comparação de valores LAG() para calcular a variação no valor das vendas em relação à venda anterior para cada produto:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Como resultado, é possível extrair facilmente informações sobre as diferenças de vendas para cada produto específico sem utilizar subconsultas ou procedimentos armazenados.
Também é possível calcular as diferenças para todas as vendas sem particionamento utilizando a seguinte consulta:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Você pode notar que não incluímos a cláusula PARTITION BY no bloco OVER. Isso significa que não queremos obter os valores anteriores apenas para um produto específico, mas para todas as vendas na tabela.

question mark

O que a função 'NTILE()' faz no SQL?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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