4.1 Colonne di raggruppamento

Ciò che è anche molto importante è che se raggruppi i record, nella sezione SELECTpuoi solo specificare le colonne in base alle quali i dati sono raggruppati.

Voinon puòscrivi una query di tipo e specifica la SELECTcolonna del nome nella sezione :

SELECT brand, name
FROM product
GROUP BY brand

Hai un sacco di righe nella tabella del prodotto con il campo name e non è chiaro quale riga devi sostituire qui. Ripensaci: vuoi conoscere il numero di prodotti di ogni marca e in che modo la tabella risultante può ottenere il nome del prodotto?

Se utilizzi l'operatore GROUP BY, le righe normali non possono entrare nel risultato, ma solo le colonne in base alle quali i dati sono raggruppati e le "colonne calcolate", comeCOUNT(*)

4.2 Raggruppamento per colonne calcolate

Ma puoi raggruppare per più colonne e persino per colonne calcolate. Esempio:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

E il risultato di questa query:

noleggio_anno totale
2012 1
2013 1
2014 1
2015 2
2018 1

Analizziamo la nostra richiesta.

Nella tabella dei dipendenti , ogni dipendente ha una data di assunzione univoca, quindi il raggruppamento dei dati non funzionerà: ci sarà un record per ogni data e il raggruppamento non avrà molto senso. Ma se passiamo dalla data di assunzione all'anno di assunzione, potrebbe benissimo trattarsi di una situazione in cui l'azienda ha assunto più dipendenti nello stesso anno.

Vediamo di nuovo come sarà questa tabella prima di raggruppare:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

E il risultato di questa query:

id nome noleggio_anno data di iscrizione
1 Ivanov Ivan 2012 2012-06-30
2 Petrov Petr 2013 2013-08-12
3 Sergej Ivanov 2014 2014-01-01
4 Rabinovich Moisha 2015 2015-05-12
5 Kirienko Anastasia 2015 2015-10-10
6 Vasca 2018 2018-11-11

Ma questa tabella risultante può essere raggruppata per anno_assunzione e scoprire quante persone sono state assunte in un determinato anno.

4.3 Raggruppamento per più colonne

Ora proviamo a scoprire quanti dipendenti abbiamo assunto ogni mese di ogni anno. Per fare ciò, dobbiamo aggiungere alla query non uno, ma due campi calcolati contemporaneamente: l'anno di assunzione (hire_year) e il mese di assunzione (hire_month).

Scriviamo una query come questa:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

E il risultato di questa query:

id nome noleggio_anno noleggio_mese data di iscrizione
1 Ivanov Ivan 2012 6 2012-06-30
2 Petrov Petr 2013 8 2013-08-12
3 Sergej Ivanov 2014 1 2014-01-01
4 Rabinovich Moisha 2015 5 2015-05-12
5 Kirienko Anastasia 2015 10 2015-10-10
6 Vasca 2018 undici 2018-11-11

Se raggruppiamo i dati in questa tabella dei risultati per mese, raggruppiamo semplicemente le persone in gruppi, indipendentemente dall'anno in cui sono state assunte. E abbiamo bisogno che la tabella risultante abbia tre colonne: anno, mese e numero di dipendenti assunti.

Per fare ciò, dopo l'operatore, GROUP BYè necessario utilizzare il nome non di una colonna, ma di due. Esempio:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

E il risultato di questa query:

noleggio_anno noleggio_mese totale
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 undici 1

Abbiamo pochi record nella tabella, quindi ci sono unità ovunque nella colonna totale. E a proposito, nota che più colonne raggruppiamo, più righe abbiamo nel risultato.