MIN
Descrizione
MIN
è una funzione di aggregazione della finestra che suddivide le righe in gruppi, ordina le righe in base a un campo e restituisce il valore minimo (più basso) nel gruppo.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 (minimo per questa funzione) in ogni gruppo.
Sintassi
whereMIN(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
Il valore restituito è dello stesso tipo di campo del valore di input.
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 aMINespressione
- 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 (minimo 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
Esempio: si dispone di un set di dati con queste righe e questi campi.
Organizzazione di supervisione | Trimestre | Nome | Modifica comp |
|---|---|---|---|
Marketing | 2019-Q1 | Ehi | 2000.00 |
Marketing | 2019-Q1 | Freeman | 1000,00 |
Marketing | 2019-Q1 | Smith | 2500.00 |
Consulenza | 2019-Q1 | Gomez | 5000.00 |
Consulenza | 2019-Q1 | Kimura | 3000.00 |
Consulenza | 2019-Q1 | Fitz | 3500.00 |
Consulenza | 2019-Q2 | Gomez | 0 |
Consulenza | 2019-Q2 | Kimura | 2000.00 |
Consulenza | 2019-Q2 | Fitz | 1.500,00 |
È possibile calcolare la variazione più bassa della retribuzione (campo
Modifica comp
) per ogni organizzazione di supervisione in ogni trimestre.Per garantire che il sistema restituisca lo stesso valore per ogni riga di una partizione, ordinare le righe in ordine crescente (
ASC
) in base allo stesso campo del campo di input, in modo che la modifica della retribuzione più bassa venga prima in ogni partizione.Utilizzare questa espressione nel campo
Min Comp Change
:MIN([Comp Change]) OVER( PARTITION BY [Supervisory Org], [Quarter] ORDER BY [Comp Change] ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )
Si ottengono i seguenti risultati:
Organizzazione di supervisione | Trimestre | Nome | Modifica comp | Min variazione comp |
|---|---|---|---|---|
Consulenza | 2019-Q1 | Kimura | 3000.00 | 3000.00 |
Consulenza | 2019-Q1 | Fitz | 3500.00 | 3000.00 |
Consulenza | 2019-Q1 | Gomez | 5000.00 | 3000.00 |
Consulenza | 2019-Q2 | Gomez | 0 | 0 |
Consulenza | 2019-Q2 | Fitz | 1.500,00 | 0 |
Consulenza | 2019-Q2 | Kimura | 2000.00 | 0 |
Marketing | 2019-Q1 | Freeman | 1000,00 | 1000,00 |
Marketing | 2019-Q1 | Ehi | 2000.00 | 1000,00 |
Marketing | 2019-Q1 | Smith | 2500.00 | 1000,00 |