Linguaggio SQL. Settima parte.
Le funzioni di raggruppamento (prima parte).
Consideriamo la tabella TEMPERATURE:
| CITTA |
TEMPERATURA |
DATA |
|
|
|
| MILANO |
5 |
10-01-2001 |
| MILANO |
7 |
11-01-2001 |
| MILANO |
9 |
12-01-2001 |
| TORINO |
5 |
10-01-2001 |
| TORINO |
7 |
11-01-2001 |
| TORINO |
6 |
12-01-2001 |
Come prima cosa vorrei farvi notare che la colonna citta' e' scritta senza accento, questo per evitare problemi di riconoscimento della stringa in una istruzione sql.
Supponiamo di voler conoscere la temperatura media delle due citta'.
Per fare cio' dobbiamo usare la funzione
AVG, che calcola la media dei valori che le vengono passati, si tratta di una funzione di raggruppamento, appunto perche' 'raggruppa' i record e li elabora (in questo caso ne calcola la media).
Ad esempio:
SELECT AVG(temperatura) media
FROM temperature;
Il risultato e':
Quindi la funzione ha raggruppato i sei record e ne ha estratto la media.
Supponiamo ora di voler estrarre la temperatura media di ogni citta'. Dobbiamo quindi indicare al database che vogliamo raggruppare i record secondo le citta'.
Per fare questo si utilizza una nuova clausola la
GROUP BY.
SELECT citta,AVG(temperatura) media
FROM temperature
GROUP BY citta;
Ottenendo:
| citta |
media |
| ------- |
------- |
| MILANO |
7 |
| TORINO |
6 |
E' fondamentale ricordarsi che quando si applica una funzione di raggruppamento, se si estraggono altre colonne, come la citta nel nostro caso, queste devono essere incluse nella group by, separate da virgola, se ce n'e' piu' di una.
Concludo questo intervento con una tabella che elenca le funzioni di raggruppamento a disposizione con sql:
| FUNZIONE |
DESCRIZIONE |
|
|
| AVG |
Calcola la media |
| COUNT |
Conta i record, escludendo i null |
| MAX |
calcola il massimo |
| MIN |
calcola il minimo |
| STDDEV |
Calcola la deviazione standard |
| SUM |
Calcola la somma |
| VARIANCE |
Calcola la varianza |
E se volessi estrarre le citta la cui media e' maggiore di 6.5? Si deve utilizzare una nuova clausola, che esamineremo nel prossimo intervento.