Deze tutorial maakt deel uit van de serie Learn Basic SQL Queries Using MySQL. In deze zelfstudie bespreken we SQL-query's om de tabelrijen in MySQL te groeperen met behulp van de GROUP BY-component met de aggregatiefuncties. U kunt ook het gebruik van geaggregeerde functies (SUM, AVG, MAX, MIN, COUNT, DISTINCT) in MySQL volgen om de aggregatiefuncties te leren.
Groeperen op zoekopdracht
De GROUP BY clausule kan worden gebruikt om de tabelrijen te groeperen. Het kan ook worden gebruikt met de verzamelfuncties om rapporten te genereren en statistische gegevens te verzamelen.
# GROUP BY - Syntax
SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;
Uitleg zoekopdracht
De GROUP BY clausule kan worden gebruikt om de rijen te groeperen door de kolommen op te geven om de reeks rijen te vormen.
We kunnen geaggregeerde functies gebruiken om de GROUP BY-clausule effectief te gebruiken om de rapporten te genereren en om statistische gegevens te verzamelen.
De groepering kan worden toegepast op meerdere kolommen, waarbij de eerste kolom de primaire groep vormt en de volgende kolommen subgroepen.
Voorbeelden
In deze sectie vindt u voorbeelden voor het groeperen met behulp van de GROUP BY-component met en zonder aggregatiefuncties. Gebruik de onderstaande query om de gebruikerstabel te maken met de id, voornaam, achternaam, leeftijd en actieve kolommen om gebruikersgegevens op te slaan.
# 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`));
De onderstaande query kan worden gebruikt om testgegevens in de gebruikerstabel in te voegen.
# 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 );
De bovengenoemde zoekopdracht voegt 5 rijen in de tabel in met de id, voornaam, achternaam en actieve kolommen om 5 verschillende gebruikers te vertegenwoordigen.
Nu zullen we de GROUP BY-clausule gebruiken zonder de aggregatiefuncties om de rijen te groeperen. Het kan worden gedaan met behulp van de GROUP BY-clausule in MySQL, zoals hieronder weergegeven.
# 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
De bovengenoemde query's hebben de resultaatset geretourneerd door de rijen te groeperen met behulp van de GROUP BY-component. Nu zullen we de rijen groeperen met de aggregatiefunctie zoals hieronder getoond.
# 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
Zo kunnen we de GROUP BY-component met en zonder de aggregatiefuncties gebruiken om de rijen van de tabel voor de specifieke kolommen te groeperen.