4.1 Colonne di raggruppamento
Ciò che è anche molto importante è che se raggruppi i record, nella sezione SELECT
puoi solo specificare le colonne in base alle quali i dati sono raggruppati.
Voinon puòscrivi una query di tipo e specifica la SELECT
colonna 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.
GO TO FULL VERSION