MySQL - GROUP BY Clause: A Beginner's Guide

Bonjour là-bas, futurs magiciens des bases de données ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde de la clause GROUP BY de MySQL. Ne vous inquiétez pas si vous n'avez jamais écrit une ligne de code auparavant - je serai votre guide amical, et nous avancerons pas à pas. À la fin de ce tutoriel, vous serez capable de regrouper des données comme un pro !

MySQL - Group By Clause

Qu'est-ce que la clause GROUP BY de MySQL ?

Imaginez que vous organisez une énorme bibliothèque. Vous ne jetteriez pas tous les livres sur une seule étagère, n'est-ce pas ? Vous les regrouperiez par genre, auteur ou année de publication. C'est exactement ce que fait la clause GROUP BY pour nos données - elle nous aide à organiser et à résumer l'information de manière significative.

La clause GROUP BY est utilisée dans les requêtes SQL pour regrouper les lignes qui ont les mêmes valeurs dans les colonnes spécifiées. Elle est souvent utilisée avec des fonctions d'agrégation comme COUNT(), MAX(), MIN(), SUM(), AVG() pour effectuer des calculs sur chaque groupe de lignes.

Voyons quelques exemples pour voir comment cela fonctionne dans la pratique !

GROUP BY de MySQL sur une seule colonne

Commençons par un exemple simple. Imaginez que nous avons une table appelée employees avec les colonnes employee_id, name, department, et salary. Nous voulons savoir combien d'employés il y a dans chaque département.

Voici comment nous ferions cela :

SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

Cette requête nous donnera un résultat comme celui-ci :

department employee_count
Sales 10
Marketing 5
IT 8

Reprenons ce qui se passe ici :

  1. Nous SELECT la colonne department et utilisons la fonction COUNT(*) pour compter les lignes.
  2. Nous donnons un nom sympathique au comptage avec AS employee_count.
  3. La clause GROUP BY regroupe les résultats par department.

Le résultat nous montre combien d'employés il y a dans chaque département. Génial, n'est-ce pas ?

GROUP BY de MySQL sur plusieurs colonnes

Maintenant, montons d'un cran. Que se passe-t-il si nous voulons regrouper par plus d'une colonne ? Pas de problème ! Disons que notre table employees a également une colonne job_title, et nous voulons savoir combien d'employés ont chaque poste dans chaque département.

Voici comment nous ferions cela :

SELECT department, job_title, COUNT(*) AS employee_count
FROM employees
GROUP BY department, job_title;

Cela pourrait nous donner un résultat comme celui-ci :

department job_title employee_count
Sales Sales Rep 8
Sales Sales Manager 2
Marketing Content Writer 3
Marketing SEO Specialist 2
IT Developer 6
IT IT Manager 2

Maintenant, nous pouvons voir non seulement combien d'employés il y a dans chaque département, mais aussi comment ils sont répartis entre différents postes. C'est comme organiser notre bibliothèque par genre, puis par auteur !

GROUP BY de MySQL avec la clause ORDER BY

Souvent, nous voulons que nos résultats regroupés soient dans un ordre spécifique. C'est là que la clause ORDER BY devient utile. Reprenons notre résultat précédent et ordonnons-le par département, puis par le nombre d'employés en ordre décroissant :

SELECT department, job_title, COUNT(*) AS employee_count
FROM employees
GROUP BY department, job_title
ORDER BY department, employee_count DESC;

Cela nous donnera :

department job_title employee_count
IT Developer 6
IT IT Manager 2
Marketing Content Writer 3
Marketing SEO Specialist 2
Sales Sales Rep 8
Sales Sales Manager 2

Maintenant, nos résultats sont bien organisés par département, et au sein de chaque département, les postes sont triés par le nombre d'employés en ordre décroissant.

GROUP BY de MySQL avec la clause HAVING

Parfois, nous voulons filtrer nos résultats regroupés. Nous pourrions utiliser une clause WHERE, mais cela filtre les lignes avant qu'elles ne soient regroupées. Que se passe-t-il si nous voulons filtrer les groupes eux-mêmes ? C'est là que la clause HAVING entre en jeu.

Disons que nous ne voulons voir que les départements avec plus de 5 employés :

SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING employee_count > 5;

Cela pourrait nous donner :

department employee_count
Sales 10
IT 8

La clause HAVING a filtré le département Marketing car il n'avait que 5 employés.

Clause GROUP BY utilisée avec un programme client

Maintenant, mettons tout cela en pratique en utilisant un programme client MySQL. J'utiliserai le client en ligne de commande MySQL pour cet exemple, mais les principes sont les mêmes pour n'importe quel client MySQL.

Premièrement, créons notre table employees et insérons quelques données :

CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
job_title VARCHAR(50),
salary DECIMAL(10, 2)
);

INSERT INTO employees VALUES
(1, 'John Doe', 'Sales', 'Sales Rep', 50000),
(2, 'Jane Smith', 'Marketing', 'Content Writer', 55000),
(3, 'Bob Johnson', 'IT', 'Developer', 65000),
(4, 'Alice Brown', 'Sales', 'Sales Manager', 70000),
(5, 'Charlie Davis', 'IT', 'IT Manager', 75000);

Maintenant, exécutons une requête qui combine tout ce que nous avons appris :

SELECT department, job_title, AVG(salary) AS avg_salary, COUNT(*) AS employee_count
FROM employees
GROUP BY department, job_title
HAVING avg_salary > 60000
ORDER BY avg_salary DESC;

Cette requête :

  1. Regroupe les employés par département et poste
  2. Calcule le salaire moyen et le nombre d'employés pour chaque groupe
  3. Ne montre que les groupes avec un salaire moyen supérieur à 60 000 $
  4. Trie les résultats par salaire moyen en ordre décroissant

Le résultat pourrait ressembler à ceci :

department job_title avg_salary employee_count
IT IT Manager 75000.00 1
Sales Sales Manager 70000.00 1
IT Developer 65000.00 1

Et voilà ! Nous avons fait le voyage de la clause GROUP BY de base à sa combinaison avec d'autres clauses pour une analyse de données puissante. Souvenez-vous, la pratique rend parfait. Essayez d'écrire vos propres requêtes, expérimentez avec différentes combinaisons, et bientôt vous regroupperez les données comme un administrateur de base de données chevronné !

Bonne requête, et puissé vos données toujours être bien organisées !

Credits: Image by storyset