Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

A versatilidade do SQL como linguagem de consulta DBMS aumentou ao longo dos anos. Sua ampla utilidade e versatilidade o tornam o favorito de todos os tempos para todos os analistas de dados.

Existem algumas funções de nível avançado além das normais do SQL. Essas funções são comumente conhecidas como funções de janela. Se você está lidando com dados complexos e deseja realizar cálculos avançados, pode usá-los para fazer o melhor uso de seus dados.

A importância das funções de janela

Várias funções de janela estão disponíveis no SQL e cada uma ajudará você a realizar uma série de cálculos. Desde a criação de partições até a classificação de linhas ou a atribuição de números de linha, essas funções de janela fazem um pouco de tudo.

As funções de janela são úteis quando você está aplicando funções de agregação em um conjunto de dados específico ou coleção de linhas. Essas funções vão além das funções de agregação fornecidas por GROUP BY. No entanto, a principal diferença é que, ao contrário da função de agrupamento, seus dados não são combinados em uma única linha.

Você não pode usar funções de janela dentro do ONDE, DE, e GRUPO POR declarações.

Sintaxe de uma função de janela

Ao se referir a qualquer função de janela, você precisa seguir a estrutura de sintaxe padrão, para que ela funcione corretamente. Se você estruturar o comando incorretamente, receberá um erro e seu código falhará ao ser executado.

Aqui está a sintaxe padrão:

SELECIONE nomedacoluna1,
{window_function}(coluna2)
OVER([PARTITION BY columnname1] [ORDER BY columnname3]) AS new_column
FROM nome_da_tabela;

Onde:

  • coulmnname1 é o nome da primeira coluna que você gostaria de selecionar.
  • {window_function} é o nome de uma função de agregação, como sum, avg, count, row_number, rank ou densa_rank.
  • nome da coluna2 é o nome da coluna na qual você está aplicando a função de janela.
  • nomedacoluna3 é o nome da terceira coluna, que formará a base da partição.
  • nova_coluna é um rótulo para a nova coluna que você pode aplicar usando o COMO palavra-chave.
  • Nome da tabela é o nome da tabela de origem.

As funções da janela são diferentes de algumas das comandos SQL mais básicos. Ao contrário das funções agregadas no SQL, você pode usar essas funções de janela para executar funções avançadas.

Preparando o conjunto de dados

Você pode usar o CRIAR A TABELA declaração para criar uma nova tabela no SQL. Aqui está um exemplo de conjunto de dados que este guia usará para definir algumas funções de janela:

Data do pedido

Categoria

Cor

Preço de venda

Quantidade

08-11-2016

Telefones

Preto

907.152

6

12-06-2016

Fichários

Verde

18.504

3

11-10-2015

Eletrodomésticos

Amarelo

114.9

5

11-10-2015

Tabelas

Marrom

1706.184

9

09-06-2014

Telefones

Vermelho

911.424

4

09-06-2014

Papel

Branco

15.552

3

09-06-2014

Fichários

Preto

407.976

3

09-06-2014

Eletrodomésticos

Amarelo

68.81

5

09-06-2014

Fichários

Verde

2.544

3

09-06-2014

Armazenar

Laranja

665.88

6

09-06-2014

Armazenar

Laranja

55.5

2

15-04-2017

Telefones

Preto

213.48

3

05-12-2016

Fichários

Verde

22.72

4

22-11-2015

Eletrodomésticos

Verde

60.34

7

22-11-2015

cadeiras

Marrom escuro

71.372

2

13-05-2014

Mobília

Laranja

190.92

5

A função soma explicada

Suponha que você queira calcular o total de vendas para cada valor na coluna da categoria. Veja como você pode fazer isso:

SELECIONEcategoria, cor,
soma (preço_de_venda)
OVER (ordenar por categoria) AS total_sales
DE sahil.sample;

No código acima, a instrução SQL extrai a categoria e a cor do conjunto de dados original. A função sum adiciona a coluna sale_price. Ele faz isso por categoria, pois a cláusula OVER especifica a ordenação pela coluna de categoria. O resultado final é o seguinte:

Como usar a função de janela Avg()

Assim como a função sum, você pode calcular a média por linha de dados com o método média função. Em vez da soma, você obterá uma coluna com as vendas médias.

SELECIONEcategoria, cor,
médio (preço_venda)
OVER (ordenar por categoria) AS avg_sales
DE sahil.sample;

Aprenda a usar a função de janela Count()

Semelhante às funções sum e avg, a função count window no SQL é bastante direta e funciona da mesma forma que as outras duas funções. Ao passar a função de contagem, você obtém a contagem total de cada valor dentro da nova coluna.

Veja como você pode calcular a contagem:

SELECIONEcategoria, cor,
contagem (categoria)
OVER (ordenar por categoria) AS item_count
DE sahil.sample;

A função de janela Row_Number()

Ao contrário de algumas das outras funções de janela listadas acima, o row_number() funciona de maneira ligeiramente diferente. A função row_number() atribui um número de linha a cada linha, dependendo da cláusula order by. O número da linha inicial é 1; o row_number atribui um valor correspondente a cada linha até o final.

Aqui está a estrutura básica de uma função row_number():

SELECIONEcategoria, cor,
número_linha()
OVER (ordenar por categoria) AS item_number
DE sahil.sample;

Mas o que acontece se você quiser atribuir números de linha separados a cada item de categoria? A sintaxe acima define um número de série contínuo, independentemente dos itens armazenados na categoria. Por exemplo, a categoria de eletrodomésticos deve ter sua numeração exclusiva, seguida de encadernação, e assim por diante.

Você pode usar o partição função para executar esta tarefa simples, mas prática. A palavra-chave de partição atribui números de linha designados com base em cada item de categoria.

SELECIONEcategoria, cor,
número_linha()
OVER (partição por ordem de categoria por categoria) AS item_number
DE sahil.sample;

As funções Rank() e Dense_Rank()

O classificação() função funciona de forma diferente da número_linha() função. Você precisa especificar o nome da coluna dentro da ordem por função, para usá-la como base para definir os valores de classificação. Por exemplo, no exemplo de código a seguir, você pode usar a coluna de cores na ordem por função. A consulta usará essa ordem para atribuir um valor de classificação a cada linha.

Você pode usar a sintaxe de código abaixo para passar uma função de classificação no SQL:

SELECIONEcategoria, cor,
classificação()
OVER (ordenar por cor) AS item_rank
DE sahil.sample;

Dê uma olhada na saída para entender como essa função funciona.

A função order by classifica a categoria de cor, enquanto a função rank atribui uma classificação a cada cor. No entanto, todos os mesmos valores de cor têm a mesma classificação, enquanto as cores diferentes têm classificações separadas. A cor preta ocorre três vezes no conjunto de dados; em vez de atribuir um valor de classificação de 1, 2 e 3, os itens de cor preta obtêm uma classificação de 1.

No entanto, a próxima cor, marrom, recebe classificação 4 em vez de classificação 2. A função de classificação pula valores e atribui o próximo valor cronológico às diferentes entradas. Se você deseja atribuir um valor de classificação mais significativo, pode usar o rank_denso() função.

A função densa_rank não ignora nenhum valor de classificação durante a ordem por função. Por exemplo, os três primeiros itens de cor (preto) terão classificação 1. Porém, a cor seguinte (Castanho) não terá o posto 4, mas sim o posto 2, que é o seguinte número cronológico na lista de numeração. A função densa_rank é uma função de janela mais prática, pois atribui um valor significativo à lista de itens.

Veja como você pode usar a função densa_rank no SQL:

SELECIONEcategoria, cor,
rank_denso()
OVER (ordenar por cor) AS item_rank
DE sahil.sample;

E aqui está um exemplo de como será a saída dessa função:

Funções SQL para o resgate

As funções de janela do SQL são ideais para realizar operações analíticas avançadas. No entanto, você pode usar muitos outros comandos SQL para garantir que suas habilidades computacionais sejam excelentes. Quando você combina e calcula vários resultados de uma só vez, não há nada melhor do que usar as subconsultas do SQL.

As subconsultas são uma excelente ferramenta para executar funções avançadas, aumentando a qualidade dos seus resultados. Dependendo da necessidade do momento, você pode personalizar suas consultas e torná-las mais eficazes para atender às suas necessidades.