Mysql
 sql >> Base de données >  >> RDS >> Mysql

Regrouper les lignes à l'aide de la clause Group By dans MySQL

Ce didacticiel fait partie de la série Apprendre les requêtes SQL de base à l'aide de MySQL. Dans ce didacticiel, nous aborderons les requêtes SQL pour effectuer le regroupement des lignes de la table dans MySQL à l'aide de la clause GROUP BY avec les fonctions d'agrégation. Vous pouvez également suivre Utilisation des fonctions d'agrégation (SUM, AVG, MAX, MIN, COUNT, DISTINCT) dans MySQL pour apprendre les fonctions d'agrégation.

Regrouper par requête

Le GROUPER PAR La clause peut être utilisée pour effectuer le regroupement des lignes du tableau. Il peut également être utilisé avec les fonctions d'agrégation pour générer les rapports et collecter des données statistiques.

# GROUP BY - Syntax
SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;

Explication de la requête

Le GROUPER PAR La clause peut être utilisée pour regrouper les lignes en spécifiant les colonnes pour former l'ensemble de lignes.

Nous pouvons utiliser des fonctions d'agrégation pour utiliser efficacement la clause GROUP BY afin de générer les rapports et de collecter des données statistiques.

Le regroupement peut être appliqué sur plusieurs colonnes où la première colonne formera le groupe principal et les colonnes suivantes formeront des sous-groupes.

Exemples

Cette section fournit des exemples pour effectuer un regroupement à l'aide de la clause GROUP BY avec et sans fonctions d'agrégation. Utilisez la requête mentionnée ci-dessous pour créer la table utilisateur contenant l'identifiant, le prénom, le nom, l'âge et les colonnes actives pour stocker les données utilisateur.

# 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 requête mentionnée ci-dessous peut être utilisée pour insérer des données de test dans la table utilisateur.

# 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 requête mentionnée ci-dessus insérera 5 lignes dans le tableau ayant l'identifiant, le prénom, le nom et les colonnes actives pour représenter 5 utilisateurs différents.

Nous allons maintenant utiliser la clause GROUP BY sans les fonctions d'agrégation pour regrouper les lignes. Cela peut être fait en utilisant la clause GROUP BY dans MySQL comme indiqué ci-dessous.

# 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

Les requêtes mentionnées ci-dessus ont renvoyé le jeu de résultats en regroupant les lignes à l'aide de la clause GROUP BY. Nous allons maintenant regrouper les lignes avec la fonction d'agrégation comme indiqué ci-dessous.

# 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

C'est ainsi que nous pouvons utiliser la clause GROUP BY avec et sans les fonctions d'agrégation pour regrouper les lignes de la table pour les colonnes spécifiques.