back to top

Raggruppare valori (GROUP BY) e unire più resultset (UNION) in MySQL

In questa lezione tratteremo velocemente due sintassi che consentono di effettuare selezioni più complesse in MySQL. Essendo gli argomenti già stati trattati in appositi approfondimenti sul linguaggio SQL, ci limieremo a dei brevi accenni rinviando il lettore ai citati articoli.

GROUP BY e HAVING

La clausola GROUP BY è un elemento facoltativo che può essere inserito all’interno di una SELECT. Il suo scopo è quello di effettuare dei raggruppamenti di dati. Supponiamo, ad esempio, di voler raggruppare i record della nostra tabella "amici" in base al cognome. Per fare ciò utilizzeremo:

SELECT cognome FROM amici GROUP BY cognome;

Come i più attenti di voi avranno già notato, il risultato di questa querry è il medesimo che avremmo potuto ottenre con SELECT DISTINCT:

SELECT DISTINCT cognome FROM amici;

Le potenzialità di GROUP BY, in realtà, emergono quando questa clausola è utilizzata in comunione con HAVING la quale consente di perfezionare i risultati restituiti dalla SELECT mediante un filtro su valori raggruppati. Ad esempio:

SELECT cognome, COUNT(id) AS quanti
FROM amici
GROUP BY cognome
HAVING quanti > 1;

Mediante questa query abbiamo filtrato il resultset mostrando unicamente quei cognomi per i quali è possibile rinvenire più di una occorrenza all’interno della tabella.

L’importanza di GROUP BY, inoltre, emerge quando si utilizzano le cosiddette funzioni di aggregazione (come, appunto, COUNT()). In merito a tali funzioni rimando a questa lezione del corso sul linguaggio SQL cui MySQL si ispira fedelmente.

Per maggiori informazioni su GROUP BY e HAVING si faccia riferimento a questo articolo.

Le UNION

Un altro costrutto di MySQL che merita una certa attenzione è UNION. Attraverso questa istruzione di SQL è possibile unire i risultati di più query all’interno di un unico resultset.

Affinche una UNION funzioni correttamente è necessario che:

  • il numero delle colonne selezionate sia uguale in ciascuna delle query che si desidera unire;
  • il datataype delle colonne sia corrisponente (o convertibile), non essendo possibile unire i valori estratti da colonne aventi tipi di dato disomogenei (ad esempio INT e VARCHAR).

Vediamo un esempio:

SELECT nome, cognome FROM amici
UNION
SELECT nome, cognome FROM parenti;

Pere maggiori informazioni sul comando UNION vi invito a leggere questo articolo.

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

In questa guida...