Questo tutorial fa parte della serie Learn Basic SQL Query Using MySQL. In questo tutorial, discuteremo le query SQL per eseguire il raggruppamento delle righe della tabella in MySQL utilizzando la clausola GROUP BY con le funzioni aggregate. Puoi anche seguire Utilizzo delle funzioni aggregate (SUM, AVG, MAX, MIN, COUNT, DISTINCT) in MySQL per apprendere le funzioni aggregate.
Raggruppa per query
Il GRUPPO PER La clausola può essere utilizzata per eseguire il raggruppamento delle righe della tabella. Può essere utilizzato anche con le funzioni aggregate per generare i report e per raccogliere dati statistici.
# GROUP BY - Syntax
SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;
Spiegazione della query
Il GRUPPO PER La clausola può essere utilizzata per raggruppare le righe specificando le colonne per formare l'insieme di righe.
Possiamo utilizzare funzioni aggregate per utilizzare efficacemente la clausola GROUP BY per generare i report e per raccogliere dati statistici.
Il raggruppamento può essere applicato su più colonne in cui la prima colonna formerà il gruppo principale e le colonne successive formeranno dei sottogruppi.
Esempi
Questa sezione fornisce esempi per eseguire il raggruppamento utilizzando la clausola GROUP BY con e senza funzioni di aggregazione. Utilizzare la query di seguito menzionata per creare la tabella utente con l'ID, il nome, il cognome, l'età e le colonne attive per memorizzare i dati dell'utente.
# Create the User Table
CREATE TABLE `enterprise`.`user` (
`user_id` BIGINT NOT NULL,
`first_name` VARCHAR(45) ,
`last_name` VARCHAR(45),
`age` SMALLINT(6) NOT NULL DEFAULT 0,
`active` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`user_id`));
La query sotto menzionata può essere utilizzata per inserire dati di test nella tabella utente.
# Insert Rows - All Columns
INSERT INTO `user` ( `user_id`, `first_name`, `last_name`, `age`, `active` ) VALUES
( 1, 'John', 'Smith', 18, 1 ),
( 2, 'Rick', 'Jones', 19, 1 ),
( 3, 'John', 'Ponting', 16, 0 ),
( 4, 'Harsh', 'Upadhyay', 20, 1 ),
( 5, 'Tajwinder', 'Singh', 18, 0 );
La suddetta query inserirà 5 righe nella tabella con id, nome, cognome e colonne attive per rappresentare 5 utenti diversi.
Ora useremo la clausola GROUP BY senza le funzioni aggregate per raggruppare le righe. Può essere fatto usando la clausola GROUP BY in MySQL come mostrato di seguito.
# GROUP BY - Generate the set of active values
SELECT active from user GROUP BY active;
# Result
1
0
# GROUP BY - Generate the set of first name
SELECT first_name from user GROUP BY first_name;
# Result
John
Rick
Harsh
Tajwinder
Le query sopra menzionate hanno restituito il set di risultati raggruppando le righe utilizzando la clausola GROUP BY. Ora raggrupperemo le righe con la funzione di aggregazione come mostrato di seguito.
# GROUP BY - Get the maximum age of all users with specific first name
SELECT first_name, MAX(age) AS max_age from user GROUP BY first_name;
# Result
John 18
Rick 19
Harsh 20
Tajwinder 18
# GROUP BY - Get the average age of all users with specific first name
SELECT first_name, AVG(age) AS avg_age from user GROUP BY first_name;
# Result
John 17.0000
Rick 19.0000
Harsh 20.0000
Tajwinder 18.0000
Ecco come possiamo utilizzare la clausola GROUP BY con e senza le funzioni aggregate per raggruppare le righe della tabella per le colonne specifiche.