Home
  • Recipes
  • Aggregare dati in MySQL Istruzioni GROUP BY ed HAVING
francesco.chianese
pubblicato più di 2 anni fa

Aggregare dati in MySQL Istruzioni GROUP BY ed HAVING

I primi passi per estrarre dati aggregati da un DB MYSQL

In MySQL e più in generale nello standard SQL la clausola GROUP BY, permette di raggruppare i record estratti con una query in gruppi. Ad esempio se abbiamo una tabella impiegato costituita dalle colonne Eta Stipendio e Citta così valorizzate

Eta Stipendio Citta
25 1000 Napoli
35 2000 Roma
27 3000 Milano
45 4000 Napoli
32 5000 Roma
36 6000 Milano
20 7000 Milano
28 8000 Napoli
31 9000 Roma
40 10000 Roma

La seguente query

1select sum(Stipendio) as SommaStipendi, Citta
2from impiegato
3group by Citta;
restituirà il seguente risultato.
SommaStipendi Citta
13000 Napoli
26000 Roma
16000 Milano

Nella query di sopra si è utilizzata la funzione di aggregazione SUM. Tale funzione agisce soltanto su valori numerici e calcola la somma dei valori raggruppati. La clausola HAVING viene utilizzata quando risulta necessario selezionare tra i gruppi già individuati dalla GROUP BY quelli che ci interessano. Ad esempio supponiamo che dalla tabella impiegato vogliamo estrarre le città i cui impiegati complessivamente guadagnano più di 20000 euro. La query in MySQL sarà la seguente

1select sum(Stipendio) as SommaStipendi, Citta
2from impiegato
3group by Citta
4having sum(Stipendio) > 20000

In questo caso il risultato sarà

SommaStipendi Citta
26000 Roma

Da quanto espresso sopra sembra che HAVING e WHERE siano molto simili. In realtà c’è una differenza sostanziale. Infatti Mentre la clausola WHERE permette di specificare condizioni sulle singole righe della tabella, HAVING definisce delle condizioni sui gruppi selezionati dalla query. Infatti la seguente query

1select Citta
2from impiegato
3where Eta >= 30
4group by Citta
5having avg(Stipendio) > 6500

fa prima una estrazione sulla tabella impiegato, prendendo coloro che hanno una età superiore ai 30 anni, successivamente li raggruppa per Città e si estrae quelle per cui la media stipendio è superiore a 6500, in questo caso solo Roma. Da notare che anche in questo caso è stata utilizzata un’altra funzione di aggregazione che è AVG che agisce solo su valori numerici e si calcola la media aritmetica dei valori raggruppati.

Condividi su:

Esprimi un voto:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic