SQL: Query di raggruppamento

0
(0)
https://www.officineinformaticheroma.it/wp-content/uploads/2021/10/Query-di-raggruppamento.mp4

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:

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.

/ 5
Grazie per aver votato!
Vuoi abilitare le notifiche?
Desiderate avere la possibilita’ di ricevere delle notifiche? Se si avrete la possibilita’ di essere sempre aggiornati con le nostre ultime proposte o notizie . Consigliamo l’adesione Grazie !
Attiva

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

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

Vai alla barra degli strumenti