Denna handledning är en del av serien Lär dig grundläggande SQL-frågor med MySQL. I den här handledningen kommer vi att diskutera SQL-frågor för att utföra gruppering av tabellraderna i MySQL med hjälp av GROUP BY-satsen med de aggregerade funktionerna. Du kan också följa Using Aggregate Functions (SUM, AVG, MAX, MIN, COUNT, DISTINCT) i MySQL för att lära dig de aggregerade funktionerna.
Gruppera efter fråga
GROUP BY sats kan användas för att utföra gruppering av tabellraderna. Den kan också användas med de aggregerade funktionerna för att generera rapporterna och för att samla in statistisk data.
# GROUP BY - Syntax
SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;
Frågeförklaring
GROUP BY sats kan användas för att gruppera raderna genom att ange kolumnerna för att bilda uppsättningen av rader.
Vi kan använda aggregerade funktioner för att effektivt använda GROUP BY-satsen för att generera rapporterna och för att samla in statistisk data.
Grupperingen kan tillämpas på flera kolumner där den första kolumnen kommer att utgöra den primära gruppen och de efterföljande kolumnerna kommer att bilda undergrupper.
Exempel
Det här avsnittet ger exempel för att utföra gruppering med GROUP BY-satsen med och utan aggregeringsfunktioner. Använd den nedan nämnda frågan för att skapa användartabellen med id, förnamn, efternamn, ålder och aktiva kolumner för att lagra användardata.
# 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`));
Den nedan nämnda frågan kan användas för att infoga testdata i användartabellen.
# 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 );
Den ovan nämnda frågan kommer att infoga 5 rader i tabellen med id, förnamn, efternamn och aktiva kolumner för att representera 5 olika användare.
Nu kommer vi att använda GROUP BY-satsen utan aggregatfunktionerna för att gruppera raderna. Det kan göras med hjälp av GROUP BY-satsen i MySQL som visas nedan.
# 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
Ovannämnda frågor returnerade resultatuppsättningen genom att gruppera raderna med hjälp av GROUP BY-satsen. Nu ska vi gruppera raderna med aggregatfunktionen som visas nedan.
# 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
Så här kan vi använda GROUP BY-satsen med och utan aggregatfunktionerna för att gruppera tabellens rader för de specifika kolumnerna.