Possiamo fare un semplice esempio.
Considera una tabella denominata TableA
con i seguenti valori:
id firstname lastname Mark
-------------------------------------------------------------------
1 arun prasanth 40
2 ann antony 45
3 sruthy abc 41
6 new abc 47
1 arun prasanth 45
1 arun prasanth 49
2 ann antony 49
GROUP BY
La clausola SQL GROUP BY può essere utilizzata in un'istruzione SELECT per raccogliere dati su più record e raggruppare i risultati per una o più colonne.
In parole più semplici, l'istruzione GROUP BY viene utilizzata insieme alle funzioni aggregate per raggruppare il set di risultati per una o più colonne.
Sintassi:
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
WHERE conditions
GROUP BY expression1, expression2, ... expression_n;
Possiamo applicare GROUP BY
nella nostra tabella:
select SUM(Mark)marksum,firstname from TableA
group by id,firstName
risultati:
marksum firstname
----------------
94 ann
134 arun
47 new
41 sruthy
Nella nostra tabella reale abbiamo 7 righe e quando applichiamo GROUP BY id
, il server raggruppa i risultati in base a id
:
In parole semplici:
qui GROUP BY
normalmente si riduce il numero di righe restituite arrotolandole e calcolando Sum()
per ogni riga.
PARTITION BY
Prima di andare a PARTITION BY, diamo un'occhiata alla OVER
clausola:
Secondo la definizione MSDN:
La clausola OVER definisce una finestra o un set di righe specificato dall'utente all'interno di un set di risultati della query. Una funzione di finestra quindi calcola un valore per ogni riga nella finestra. È possibile utilizzare la clausola OVER con funzioni per calcolare valori aggregati come medie mobili, aggregati cumulativi, totali correnti o risultati di una N superiore per gruppo.
PARTITION BY non ridurrà il numero di righe restituite.
Possiamo applicare PARTITION BY nella nostra tabella di esempio:
SELECT SUM(Mark) OVER (PARTITION BY id) AS marksum, firstname FROM TableA
Risultato:
marksum firstname
-------------------
134 arun
134 arun
134 arun
94 ann
94 ann
41 sruthy
47 new
Guarda i risultati: partizionerà le righe e restituirà tutte le righe, a differenza di GROUP BY.