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.