Cláusula SQL OVER

Clausula Sql Over



Um dos recursos mais avançados do SQL é a cláusula OVER. É um recurso que nos permite realizar cálculos e aplicar as funções da janela SQL em um subconjunto específico de linhas dentro de um determinado conjunto de resultados.

É particularmente útil quando você precisa calcular agregações ou classificações para grupos de linhas sem realmente recolher todo o conjunto de resultados.

Junte-se a nós neste tutorial enquanto aprendemos tudo o que há para saber para você começar a trabalhar com a cláusula OVER.







Requisitos:

Antes de nos aprofundarmos na funcionalidade e no funcionamento da cláusula OVER, certifique-se de ter aprendido os conceitos básicos de SQL. Também assumimos que você tem acesso a um banco de dados que pode usar para testar seus conhecimentos.



No nosso caso, usaremos o banco de dados MySQL com o banco de dados de amostra Sakila. Apenas certifique-se de ter permissões suficientes e de que seu mecanismo de banco de dados suporte as funções da janela.



Sintaxe:

Como mencionamos anteriormente, na maioria dos casos, usamos principalmente a cláusula OVER em conjunto com as funções de janela.





Como tal, podemos expressar a sintaxe da cláusula da seguinte forma:

(expressão) OVER (

[PARTIÇÃO POR expressão_de_partição, ...]

[ORDER BY sort_expression [ASC | DESC], ...]

[especificação_quadro]

)

Na sintaxe fornecida, podemos dividir cada componente da seguinte forma:



  1. – Refere-se à função de janela que desejamos aplicar sobre uma janela específica de linhas, como SUM(), AVG(), ROW_NUMBER(), RANK, etc.
  2. Expressão – especifica uma coluna ou expressão à qual a função de janela é aplicada.
  3. PARTITION BY – Esta é uma cláusula opcional que divide o conjunto de resultados em partições onde cada partição é como uma unidade separada onde a função é aplicada. As linhas na mesma partição compartilham os mesmos valores nas colunas especificadas.
  4. ORDER BY – Especifica a ordem em que as linhas em cada partição são processadas.
  5. frame_specification – Esta é uma cláusula opcional que define o quadro de linhas dentro da partição. As especificações de quadro comuns incluem ROWS BETWEEN AND ou RANGE BETWEEN AND

Com isso resolvido, vamos explorar alguns exemplos práticos de como usá-lo.

Exemplo:

Vamos demonstrar como usar a cláusula usando o banco de dados de exemplo Sakila. Considere um exemplo em que precisamos determinar a receita total de cada categoria de filme.

Podemos usar a função de janela de soma com a cláusula OVER e várias instruções de junção, conforme mostrado no exemplo a seguir:

SELECIONAR
categoria.nome AS categoria_nome,
filme.título AS filme_título,
taxa_de_filme,
SUM(payment.amount) OVER (PARTIÇÃO POR categoria.nome) AS total_revenue
DE
filme
JUNTAR
categoria_filme ATIVADA
filme.film_id=film_category.film_id
JUNTAR
categoria ATIVADA
film_category.category_id = categoria.category_id
JUNTAR
inventário ATIVADO
filme.film_id = inventário.film_id
JUNTAR
aluguer LIGADO
inventário.inventory_id = aluguel.inventory_id
JUNTAR
pagamento ATIVADO
aluguel.aluguel_id = pagamento.aluguel_id
ORDENAR POR
Nome da Categoria,
título do filme;

Na consulta fornecida, começamos selecionando o título do filme, a taxa de aluguel e usamos a expressão soma (pagamento.valor sobre partição por categoria.nome) para determinar a soma de cada partição de categoria pelo nome da categoria.

Devemos usar a cláusula PARTITION BY para garantir que o cálculo da soma seja reiniciado em cada categoria única.

A saída resultante é a seguinte:

Aí está!

Conclusão

Neste exemplo, exploramos os fundamentos do trabalho com a cláusula OVER em SQL. Esta não é uma cláusula básica e requer familiaridade prévia com outros recursos SQL.