SQL: Query di raggruppamento

18 / 100
()

Lezione 3 – SQL: Query di raggruppamento

Che cosa significa “raggruppare”?
Funzioni delle query di raggruppamento
Parole del linguaggio: GROUP BY …
Un passo avanti: le query a campi incrociati

Che cosa significa “raggruppare”?

Capita con una notevole frequenza di dover effettuare calcoli o statistiche su dati memorizzati, che abbiano qualche caratteristica in comune.
SQL mette a disposizione, a questo scopo, un potente strumento: le query di raggruppamento.
Raggruppare significa “mettere insieme” tutti i dati, accomunati da qualche caratteristica, su cui vanno fatti alcuni tipi di conti.
Per esempio si determina con una semplice query di raggruppamento l’individuazione dell’età minima o massima o il voto medio degli alunni di una classe; oppure la somma dei prezzi degli ordini ricevuti da un’azienda in una giornata e via dicendo.

Funzioni delle query di raggruppamentoTra le operazioni realizzabili con questo strumento si ricordano:

  • Sum: somma i valori contenuti nel campo a cui si riferisce, per tutti i record del raggruppamento
  • Min: calcola il minimo tra i valori contenuti nel campo a cui si riferisce, per tutti i record del raggruppamento
  • Max: calcola il massimo tra i valori contenuti nel campo a cui si riferisce, per tutti i record del raggruppamento
  • Avg: calcola il valor medio tra quelli contenuti nel campo a cui si riferisce, per tutti i record del raggruppamento
  • Count: conta il numero dei record del raggruppamento

La sintassi relativa all’attivazione di una funzione è SELECT nome_funzione(nome_campo) AS alias

significa che verrà realizzato il calcolo indicato dalla funzione sui record del raggruppamento. Nella tabella risultante la colonna a cui corrisponderà l’uscita della funzione avrà come intestazione l’alias indicato dall’istruzione SQL

Parole del linguaggio: GROUP BY …La sintassi relativa alla definizione di un raggruppamento èGROUP BY nome_tab.nome_campo

significa che verranno aggregati tutti i record selezionati nella query che abbiano uguale contenuto del campo indicato. Su questi record verrà attivata la funzione specificata.

Esempio 1 

Istruzione SQL

SELECT Classe, Sezione, Count(Classe) AS AlunniPerClasse
FROM STUDENTI
GROUP BY Classe AND Sezione
Raggruppa i dati per classe e sezione: per ogni classe così individuata calcola quanti record esistono nella tabella Studenti (quindi numero di alunni per classe)

Esempio 2 

Istruzione SQL

SELECT STUDENTI.Classe, Avg(VOTI.Voto) AS MediaDiVoto
FROM STUDENTI INNER JOIN VOTI ON STUDENTI.ID_S = VOTI.ID_S
GROUP BY STUDENTI.Classe

Raggruppa i dati per classe: calcola il valor medio di tutti i campi “Voto” appartenenti a record che abbiano uguale valore del campo “Classe” (quindi voto medio per classe)

Come si può intuire, è possibile realizzare una query di raggruppamento sia utilizzando i dati di una tabella, sia lavorando su più tabelle in relazione. Nel secondo caso, però, è opportuno specificare sempre il nome della tabella a cui appartiene ogni singolo campo.

Un passo avanti: le query a campi incrociatiUtilizzando lo stesso meccanismo del raggruppamento, è possibile realizzare da una RecordSet di DataBase la visualizzazione di una tabella a doppia entrata. Naturalmente i dati contenuti nel Recordset devono essere tali da permettere una rappresentazione del genere.
Si supponga, per esempio, di avere memorizzato anche i dati delle ore che gli studenti del DB dedicano a passatempi di vario tipo:

Non è certo comodo leggere i dati in questo formato, soprattutto se servono rilevazioni di tipo statistico. Vediamo cosa se ne può ricavare:

Esempio 3 

Istruzione SQL

TRANSFORM Sum(HobbiesStudenti.NOre) AS SommaDiNOre
SELECT STUDENTI.Cognome
FROM HobbiesStudenti INNER JOIN STUDENTI ON HobbiesStudenti.ID_S = STUDENTI.ID_S
GROUP BY STUDENTI.Cognome
PIVOT HobbiesStudenti.Hobby;
Totale delle ore dedicate da ogni studente ad ogni attività.
Realizza un RecordSet con le due tabelle in relazione STUDENTI e HobbiesStudenti.
Applica la funzione Sum (SOMMA) al campo NOre. Lo stesso campo è il valore rappresentato nella tabella.
Crea una tabella a doppia entrata, in cui Cognome è l’indice di riga e Hobby è l’indice di colonna.
SELECT e GROUP BY individuano il campo = indice di riga.
PIVOT individua il campo = indice di colonna.
Raggruppa i dati sia per Cognome, sia per Hobby.

Esempio 4 

Istruzione SQL

TRANSFORM Avg(HobbiesStudenti.NOre) AS MediaDiNOre
SELECT STUDENTI.Cognome
FROM HobbiesStudenti INNER JOIN STUDENTI ON HobbiesStudenti.ID_S = STUDENTI.ID_S
GROUP BY STUDENTI.Cognome
PIVOT HobbiesStudenti.Hobby;
Calcolo del numero medio di ore settimanali dedicate da ogni studente ad ogni attività.
Realizza un RecordSet con le due tabelle in relazione STUDENTI e HobbiesStudenti.
Applica la funzione Avg (MEDIA) al campo NOre. Lo stesso campo è il valore rappresentato nella tabella.
Crea una tabella a doppia entrata, in cui Cognome è l’indice di riga e Hobby è l’indice di colonna.
SELECT e GROUP BY individuano il campo = indice di riga.
PIVOT individua il campo = indice di colonna.
Raggruppa i dati sia per Cognome, sia per Hobby.

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?