Parola chiave "Partition By" di Oracle


253

Qualcuno può spiegare cosa fa la partition byparola chiave e darne un semplice esempio in azione, nonché il motivo per cui si vorrebbe usarla? Ho una query SQL scritta da qualcun altro e sto cercando di capire cosa fa.

Un esempio di partizione per:

SELECT empno, deptno, COUNT(*) 
OVER (PARTITION BY deptno) DEPT_COUNT
FROM emp

Gli esempi che ho visto online sembrano un po 'troppo approfonditi.


Risposte:


259

La PARTITION BYclausola imposta l'intervallo di record che verranno utilizzati per ciascun "GRUPPO" all'interno della OVERclausola.

Nel tuo esempio SQL, DEPT_COUNTrestituirà il numero di dipendenti all'interno di quel reparto per ogni record di dipendenti. (È come se tu stia denominando la emptabella; restituisci comunque ogni record nella emptabella.)

emp_no  dept_no  DEPT_COUNT
1       10       3
2       10       3
3       10       3 <- three because there are three "dept_no = 10" records
4       20       2
5       20       2 <- two because there are two "dept_no = 20" records

Se esistesse un'altra colonna (ad es. state) , Allora potresti contare quanti dipartimenti in quello Stato.

E 'come avere i risultati di una GROUP BY( SUM, AVG, etc.) senza l'aggregazione del set di risultati (cioè la rimozione di record corrispondenti).

È utile quando si utilizzano le funzioni LAST OVERo MIN OVERper ottenere, ad esempio, lo stipendio più basso e più alto nel reparto e quindi utilizzarlo in un calcolo rispetto a questo stipendio da record senza una selezione secondaria, che è molto più veloce.

Leggi l' articolo AskTom collegato per ulteriori dettagli.


6
LAST_VALUE - restituisce l'ultimo stipendio, MAX restituisce lo stipendio più alto
Maciek Kreft,

1
Vuoi dire "senza una sottoselezione, che è molto più lenta"? Immagino di essere confuso se la sottoselezione è più lenta o più veloce di last overe min over. Immagino che una sottoselezione sia più lenta, ma la grammatica inglese nella risposta non lo suggerisce.
Jason,

Questo approccio riduce il numero di volte in cui le righe vengono elaborate, rendendolo più efficiente di una sottoselezione. Notevole in set di dati molto grandi.
Guy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.