COUNT
Descrizione
COUNT
è una funzione di aggregazione della finestra che suddivide le righe in gruppi, le ordina in base a un campo e restituisce il numero totale di righe valide (NON NULL) nel gruppo. È possibile utilizzare COUNT
insieme ad altre funzioni per calcolare gli aggregati cumulativi.Il
PARTITION BY
La clausola determina i campi da utilizzare per suddividere un insieme di righe di input in gruppi. Il ORDER BY
La clausola determina come ordinare le righe nella partizione.Il sistema separa le righe di input in gruppi in base ai campi di partizionamento, ordina le righe in base ai campi di ordinamento e quindi calcola l'espressione aggregata (numero per questa funzione) in ogni gruppo.
Sintassi
whereCOUNT(input_field)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]]RANGEBETWEENvaluePRECEDINGANDCURRENT ROW|ROWSwin_boundary|BETWEENwin_boundaryANDwin_boundary)win_boundarycan be:UNBOUNDED PRECEDINGvaluePRECEDINGUNBOUNDED FOLLOWINGvalueFOLLOWINGCURRENT ROW
Valore restituito
Restituisce un valore di tipo
LONG
.Parametri di input
- input_field
- Sono obbligatori. Campo in cui eseguire la funzione di aggregazione. È possibile utilizzare qualsiasi campo numerico o un campo Valuta.
- OVER()
- ObbligatorioOVERdeve essere utilizzato all'interno di unCOUNTespressione
- PARTITION BYpartitioning_field
- Sono obbligatori. Utilizzare ilPARTITION BYper specificare uno o più campi da utilizzare per partizionare un gruppo di righe di input. È possibile specificare qualsiasi tipo di campo tranne Valuta. Esempio: si specifica il campo Mese come campo di partizionamento, in modo che il sistema raggruppa in un'unica partizione tutti i record che hanno lo stesso valore per il mese.
- ORDER BYordering_field
- Sono obbligatori. Utilizzare ilORDER BYper specificare come ordinare le righe di input nella partizione utilizzando i valori nel campo specificato all'interno di ogni partizione. È possibile specificare qualsiasi tipo di campo tranne Valuta. Tuttavia, quando si utilizza un campo è necessario utilizzare un tipo di campo numerico, ad esempio Intero o NumericoRANGEclausolaÈ possibile utilizzareDESCoASCper ordinare le parole chiave in ordine decrescente (valori da decrescente, valori NULL ultimi) o crescente (valori decrescenti, valori NULL primi) per ogni campo di ordinamento. Se non si specifica un ordinamento per un campo di ordinamento, il sistema ordina automaticamente le righe in ordine crescente.
- RIGHE | RANGE
- Sono obbligatori. IlROWSeRANGELe clausole definiscono il numero specifico di righe (rispetto alla riga corrente) all'interno della partizione specificando un frame della finestra. Il frame della finestra viene definito specificando i punti di inizio e di fine all'interno della partizione, noti come limiti della finestra. La cornice della finestra è l'insieme di righe di input in ogni partizione su cui calcolare l'espressione aggregata (conteggio per questa funzione). La cornice della finestra può includere una, più o tutte le righe della partizione.EntrambiROWSeRANGEspecificare l'intervallo di righe relativo alla riga corrente, maRANGEopera logicamente sui valori (associazione logica) eROWSopera fisicamente sulle righe del set di dati (associazione fisica).RANGElimita la cornice della finestra a contenere righe con valori all'interno dell'intervallo specificato, rispetto al valore corrente.ROWSlimita la cornice della finestra a contenere righe che si trovano fisicamente accanto alla riga corrente.UtilizzareRANGEper definire i limiti assoluti della finestra, ad esempio gli ultimi 3 mesi o il progressivo annuale. Quando si utilizzaRANGE, ilORDER BYLa clausola deve utilizzare un tipo di campo numerico, ad esempio Intero o Numerico.Esempio: si supponga di avere un campo Intero chiamato MonthNum che rappresenta il numero del mese dell'anno (valori da 1 a 12). Per specificare tutti i valori degli ultimi 3 mesi, ordinare per MonthNum e utilizzareRANGE BETWEEN 2 PRECEDING AND CURRENT ROW. Questa clausola RANGE include il mese corrente e i due mesi precedenti, per un totale di 3 mesi.Quando si pubblica un set di dati che contiene una funzione finestra utilizzandoRANGE, il numero di righe nella finestra deve essere un massimo di 1000. Se una determinata finestra supera le 1000 righe, il job di pubblicazione non riesce.
- win_boundary
- Sono obbligatori. I limiti della finestra definiscono i punti di inizio e di fine della cornice della finestra. I limiti della finestra sono relativi alla riga corrente.APRECEDINGLa clausola definisce un limite della finestra inferiore alla riga corrente (il numero di righe da includere prima della riga corrente). IlFOLLOWINGLa clausola definisce un limite della finestra superiore alla riga corrente (il numero di righe da includere dopo la riga corrente).Se si specifica un solo limite della finestra, il sistema utilizza la riga corrente come altro limite nel riquadro della finestra (il limite superiore o inferiore a seconda della sintassi dell'espressione). IlUNBOUNDEDinclude tutte le righe nella direzione specificata. Quando è necessario specificare sia l'inizio che la fine di un frame di una finestra, utilizzareBETWEENeANDparole chiaveQuando si specifica un numero specifico di righe, ilvaloredeve essere inferiore o uguale a 100.Esempio:ROWS 2 PRECEDINGsignifica che la dimensione della finestra è di 3 righe, a partire da 2 righe che precedono fino al e includono la riga corrente.Esempio:ROWS UNBOUNDED FOLLOWINGsignifica che la finestra inizia con la riga corrente e include la riga corrente e tutte le righe successive alla riga corrente.
Esempi
È possibile calcolare il numero di spostamenti (conteggio progressivo o progressivo) delle vendite per ogni dipendente:
COUNT([Sales]) OVER( PARTITION BY [Employee] ORDER BY [SalesDate] DESC ROWS UNBOUNDED PRECEDING)
È possibile calcolare il numero complessivo di vendite per ogni riga della partizione, indipendentemente dai campi nella clausola ORDER BY:
COUNT([Sales]) OVER( PARTITION BY [Employee] ORDER BY [SalesDate] DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
È possibile calcolare il numero mobile di 12 mesi:
COUNT([fieldA]) OVER( PARTITION BY [fieldB] ORDER BY [Month] RANGE 11 PRECEDING)
Il
Month
Il campo deve essere di tipo numerico, ad esempio Intero o Numerico.È possibile calcolare il conteggio dall'inizio dell'anno precedente:
COUNT([fieldA]) OVER( PARTITION BY [fieldB] ORDER BY [Year] RANGE 1 PRECEDING)
Il
Year
Il campo deve essere di tipo numerico, ad esempio Intero o Numerico.