Dreke90 di Dreke90
Genius 6795 punti

Raggruppamenti in SQL

La clausola GROUP BY del comando SELECT permette di potenziare ulteriormente le interrogazioni sulle tabelle. Essa infatti consente di raggruppare le righe di una tabella in base ai valori di uno o più attributi,potendo cosi applicare le funzioni di aggregazione viste precedentemente ai singoli gruppi di righe.
Inoltre,attraverso la clausola HAVING,che vine in sequenza solo dopo una GROUP BY,è possibile applicare condizioni di ricerca sui gruppi di righe in modo da rispondere a interrogazioni ancora più specifiche.

Esempio pratico

Calcolare per ogni professore il numero totale di ore di insegnamento,visualizzando poi l'elenco dei nominativi dei professori con i corrispondenti valori calcolati.
SELECT Professori.CodiceProfessore, Cognome,Nome ,SUM (NumeroOre) AS NumeroTotaleOreInsegnamento
FROM Professori, Insegnano
WHERE Professori.CodiceProfessore = Insegnano.CodiceProfessore

GROUP BY Professori.CodiceProfessore, Cognome,Nome.

Simuliamo passo a passo l'esecuzione del programma
1)E' eseguito l'equin-join tra le tabelle Professori e Insegnano.

2)Le righe della tabella risultante vengono raggruppate in base ai valori degli attributi CodiceProfessore,Cognome e Nome,in modo da ottenere per ogni singolo professore le relative righe corrispondenti ai suoi dati;

3)Su ciascun gruppo di righe,e quindi per ogni singolo professore,è applicata la funzione di aggregazione SUM,in modo da ottenere per ogni professore il numero di ore di insegnamento,visualizzando l'elenco dei professori e i corrispondenti valori calcolati nella colonna individuata da NumeroTotaleOreInsegnamento.
Osserviamo che in questo caso è buona regola specificare dopo il comando SELECT tutti gli attributi che compaiono dopo la clausola GROUP BY,in modo da evitare di incorrere in errori sul raggruppamento. L'esempio può anche esser cosi sviluppato.

SELECT Cognome,Nome ,SUM (NumeroOre) AS NumeroTotaleOreInsegnamento
FROM Professori, Insegnano
WHERE Professori.CodiceProfessore = Insegnano.CodiceProfessore
GROUP BY Professori.CodiceProfessore, Cognome,Nome.

Registrati via email