Database
 sql >> Database >  >> RDS >> Database

Esercitazione sui dati:utilizzo delle funzioni della finestra

Cosa sono le funzioni della finestra?

Le funzioni della finestra consentono agli utenti di eseguire calcoli rispetto a partizioni (ovvero sottogruppi o sezioni) di un set di risultati, in genere una tabella o i risultati di un'altra query. A differenza delle tradizionali funzioni di aggregazione, che restituiscono un solo valore per ogni gruppo definito nella query, le funzioni di finestra restituiscono un singolo valore per ogni riga di input.

In che modo le funzioni della finestra sono utili?

Le funzioni della finestra aumentano l'efficienza e riducono la complessità delle query che analizzano le partizioni (finestre) di un set di dati fornendo un'alternativa a concetti SQL più complessi, ad es. query derivate. I casi d'uso comuni includono:

  • Classifica i risultati all'interno di una finestra specifica (ad es. classifica per gruppo)
  • Accesso ai dati da un'altra riga in una finestra specifica (ad es. rapporti periodo su periodo)
  • Aggregazione all'interno di una finestra specifica (es. totali parziali):

Come usare le funzioni della finestra

Le funzioni della finestra vengono avviate con OVER clausola e sono configurati utilizzando tre concetti:

  • partizione finestra (PARTITION BY ) - raggruppa le righe in partizioni
  • ordinamento delle finestre (ORDER BY ) - definisce l'ordine o la sequenza delle righe all'interno di ciascuna finestra
  • telaio della finestra (ROWS ) - definisce la finestra utilizzando un offset dalla riga specificata

Panoramica della sintassi

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

Definizioni

  • elenco_espressioni:elenco di espressioni separate da virgole, in genere nomi di colonne
  • lista_ordine:elenco di espressioni separate da virgole, in genere nomi di colonne
  • frame_clause:definisci l'offset usando CURRENT ROW , _value_ PRECEDING , UNBOUNDED PRECEDING , _value_ FOLLOWING , UNBOUNDED FOLLOWING

Esempi

Classificazione:classifica per gruppo

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

Riga precedente:analisi periodo su periodo

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

Aggregazione all'interno di una finestra:totali parziali

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

Elenco documentazione e funzioni:

Si noti che esistono sottili differenze nell'utilizzo e nella sintassi da database a database. Per informazioni specifiche sulla tua implementazione, utilizza la documentazione specifica della fonte fornita di seguito.

Postgres

  • Esercitazione
  • Funzioni

Redshift

  • Esercitazione
  • Funzioni

Oracolo

  • Esercitazione

SQLServer

  • Esercitazione

BigQuery

  • Esercitazione