Capisco il senso di GROUP BY x
.
Ma come funziona GROUP BY x, y
e cosa significa?
Raggruppare per X significa mettere tutti quelli che hanno lo stesso valore di X in un gruppo.
Raggruppare per X, Y` significa mettere tutti quelli che hanno lo stesso valore per X e Y in un gruppo.
Per illustrare con un esempio, diciamo che abbiamo la seguente tabella, che riguarda chi frequenta quale materia in un'università:
Table: Subject_Selection
Subject Semester Attendee
---------------------------------
ITB001 1 John
ITB001 1 Bob
ITB001 1 Mickey
ITB001 2 Jenny
ITB001 2 James
MKB114 1 John
MKB114 1 Erica
Quando si usa un group by
solo sulla colonna del soggetto; diciamo:
select Subject, Count(*)
from Subject_Selection
group by Subject
Otterrai qualcosa come:
Subject Count
------------------------------
ITB001 5
MKB114 2
...perché ci sono 5 voci per ITB001, e 2 per MKB114
Se dovessimo gruppare per
due colonne:
select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester
otterremmo questo:
Subject Semester Count
------------------------------
ITB001 1 3
ITB001 2 2
MKB114 1 2
Questo perché, quando raggruppiamo per due colonne, sta dicendo "Raggruppali in modo che tutti quelli con la stessa materia e semestre siano nello stesso gruppo, e poi calcola tutte le funzioni aggregate (Conta, Somma, Media, ecc.) per ognuno di quei gruppi". In questo esempio, questo è dimostrato dal fatto che, quando li contiamo, ci sono tre persone che fanno ITB001 nel semestre 1, e due che lo fanno nel semestre 2. Entrambe le persone che fanno MKB114 sono nel semestre 1, quindi non c'è una riga per il semestre 2 (nessun dato entra nel gruppo "MKB114, semestre 2")
Speriamo che questo abbia senso.
La clausola GROUP BY
è usata insieme alle funzioni aggregate per raggruppare l'insieme dei risultati per una o più colonne:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
Ricorda questo ordine:
FROM (clausola usata per elencare le tabelle)
WHERE (la clausola è usata per filtrare i record)
Puoi usarle tutte se stai usando funzioni aggregate, e questo è l'ordine in cui devono essere impostate, altrimenti puoi ottenere un errore.
Le funzioni aggregate sono:
MIN restituisce il valore più piccolo in una data colonna
SUM restituisce la somma dei valori numerici in una data colonna
AVG restituisce il valore medio di una data colonna
COUNT restituisce il numero totale di valori in una data colonna
COUNT(*) restituisce il numero di righe in una tabella