Database
 sql >> Base de Dados >  >> RDS >> Database

Tutorial de dados:usando funções de janela

O que são funções de janela?


As funções de janela permitem que os usuários realizem cálculos em partições (ou seja, subgrupos ou seções) de um conjunto de resultados, normalmente uma tabela ou os resultados de outra consulta. Ao contrário das funções de agregação tradicionais, que retornam apenas um único valor para cada grupo definido na consulta, as funções de janela retornam um único valor para cada linha de entrada.

Como as funções de janela são úteis?


As funções de janela aumentam a eficiência e reduzem a complexidade das consultas que analisam partições (janelas) de um conjunto de dados, fornecendo uma alternativa a conceitos SQL mais complexos, por exemplo. consultas derivadas. Os casos de uso comuns incluem:
  • Classificar resultados em uma janela específica (por exemplo, classificação por grupo)
  • Acessar dados de outra linha em uma janela específica (por exemplo, relatórios de período a período)
  • Agregação em uma janela específica (por exemplo, totais em execução):

Como usar as funções da janela


As funções da janela são iniciadas com o OVER cláusula e são configurados usando três conceitos:
  • partição da janela (PARTITION BY ) - agrupa linhas em partições
  • ordenação da janela (ORDER BY ) - define a ordem ou sequência de linhas dentro de cada janela
  • moldura da janela (ROWS ) - define a janela usando um deslocamento da linha especificada

Visão geral da sintaxe

function (expression) OVER
     ( [ PARTITION BY expression_list ]
       [ ORDER BY order_list ]
       [ ROWS frame_clause ])

Definições

  • expression_list:lista de expressões separadas por vírgulas, normalmente nomes de colunas
  • order_list:lista de expressões separadas por vírgulas, normalmente nomes de colunas
  • frame_clause:defina o deslocamento usando CURRENT ROW , _value_ PRECEDING , UNBOUNDED PRECEDING , _value_ FOLLOWING , UNBOUNDED FOLLOWING

Exemplos

Classificação:classificação por grupo

SELECT
      campaign
    , month
    , total_cost
    , rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8

Linha anterior:análise de período sobre período

SELECT
      campaign
    , month
    , total_cost
    , LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4

Agregação dentro de uma janela:totais em execução

SELECT
    campaign, month, monthly_cost
  , sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
    PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month

Documentação e lista de funções:


Observe que existem diferenças sutis no uso e na sintaxe de banco de dados para banco de dados. Para obter informações específicas de sua implementação, use a documentação específica da fonte fornecida abaixo.

Postgres

  • Tutorial
  • Funções

Redshift

  • Tutorial
  • Funções

Oráculo

  • Tutorial

SQLServer

  • Tutorial

BigQuery

  • Tutorial