|
Uno
dei più utili comandi all'interno della clausola WHERE è sicuramente
il GROUP BY, che serve per aggregare i dati secondo alcuni criteri;
nelle query con questa clausola si possono usare funzioni che
permettono di calcolare medie, somme, massimi, minimi etc; per esempio
la funzione COUNT effettua il conteggio delle righe restituite, mentre
la funzione AVG effettua la media dei valori dell'intervallo.
Nella
parte dopo la parola chiave SELECT, che deve contenere i nomi dei
campi da estrarre, possono essere messi solo campi contenuti nella
clausola GROUP BY o funzioni di calcolo di valori su intervalli (perché?
Sai spiegarlo?)
Es:
Prendiamo ora invece la tabella Progetti:
| Nome_progetto |
Ore_uomo |
Ambito |
| fax |
400 |
Comunicazioni |
| mail |
700 |
Comunicazioni |
| contabilità |
3500 |
Gestionale |
| stipendi |
7000 |
Gestionale |
| SMTP |
400 |
Comunicazioni |
| POP |
7000 |
Comunicazioni |
| inventario |
10500 |
Gestionale |
La
query
SELECT
Ambito, Count(*) As TOT, AVG(Ore_uomo) AS MEDIA
FROM Progetti GROUP BY Ambito
Ritorna
| Ambito |
TOT |
MEDIA |
| Comunicazioni |
4 |
2125 |
| Gestionale |
3 |
7000 |
La
funzione AVG effettua la media sui valori contenuti nel campo
Ore_uomo, raggruppati secondo il valore contenuto nel campo Ambito.
La
clausola HAVING pone delle condizioni sulle clausole di gruppo, per
esempio per condiderare solo i raggruppamenti che hanno più di un
certo numero di elementi:
Es:
con la stessa tabella dell'esempio precedente, la query
SELECT
Count(*) As NUM, Ore_uomo
FROM Progetti
GROUP BY Ore_uomo
HAVING Count(*)>1
| NUM |
Ore_uomo |
| 2 |
400 |
| 2 |
7000 |
Che
si riferiscono ovviamente alla 1°, 4°, 5° e 6° riga della
tabella.
|