# SQL GROUP BY : regrouper des valeurs identiques dans un groupe

Si vous souhaitez regrouper des lignes avec des valeurs identiques dans un groupe, l’instruction SQL `GROUP BY` est la commande qu’il vous faut. La plupart du temps, elle est utilisée en combinaison avec des fonctions d’agrégation.

## Qu’est-ce que SQL `GROUP BY` ?

Dans le [Structured Query Language](https://www.ionos.fr/digitalguide/serveur/configuration/introduction-a-sql-a-laide-dexemples/) (SQL), SQL `GROUP BY` est une instruction utilisée pour regrouper les lignes ayant des valeurs identiques. Elle est utilisée avec la [commande SQL](https://www.ionos.fr/digitalguide/serveur/configuration/commandes-sql/) `SELECT` et suit l’instruction `WHERE`. On utilise souvent SQL `GROUP BY` en combinaison avec des fonctions comme [SQL `AVG()`](https://www.ionos.fr/digitalguide/serveur/configuration/sql-avg/), [SQL `COUNT()`](https://www.ionos.fr/digitalguide/serveur/configuration/sql-count/), `MAX()`, `MIN()` ou `SUM()`. Cela vous permet de **effectuer des calculs et d’afficher les résultats dans votre tableau**. Cette instruction est particulièrement utile lorsqu’il s’agit de déterminer un ordre ou de relier des valeurs entre elles.

## Syntaxe et fonctionnement

La syntaxe de base de SQL `GROUP BY` se présente comme suit :

```sql
SELECT colonne1, colonne2, colonne3, ...
FROM nom_du_tableau
GROUP BY colonne1, colonne2, colonne3, ...;
```

On utilise souvent `GROUP BY` avec `WHERE` pour filtrer les résultats avant de les regrouper. La voici :

```sql
SELECT colonne1, colonne2, colonne3, ...
FROM nom_du_tableau
WHERE condition
GROUP BY colonne1, colonne2, colonne3, ...
ORDER BY colonne1, colonne2, colonne3, ...;
```

## Exemple d’utilisation avec `COUNT()`

Pour illustrer l’utilisation de SQL `GROUP BY`, nous allons créer un tableau simple appelé « Liste des clients ». Celui-ci contient différentes colonnes : Numéro de client, Nom, Ville et Articles.

<table>
  <thead>
    <tr>
      <th>Numéro de client</th>
      <th>Nom</th>
      <th>Ville</th>
      <th>Articles</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Berron</td>
      <td>Paris</td>
      <td>13</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Froissy</td>
      <td>Strasbourg</td>
      <td>9</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Sulis</td>
      <td>Strasbourg</td>
      <td>15</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Verdon</td>
      <td>Lille</td>
      <td>22</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Paré</td>
      <td>Paris</td>
      <td>10</td>
    </tr>
  </tbody>
</table>

Nous pouvons maintenant utiliser SQL `GROUP BY`, par exemple en combinaison avec la fonction `COUNT()`, pour lister de quelles villes proviennent combien de clients. Voici le code correspondant :

```sql
SELECT Ville, COUNT(*) AS Nombre
FROM Liste des clients
GROUP BY Ville;
```

Comme résultat, nous obtenons ce nouveau tableau :

<table>
  <thead>
    <tr>
      <th>Ville</th>
      <th>Nombre</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Lille</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Paris</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Strasbourg</td>
      <td>2</td>
    </tr>
  </tbody>
</table>

Nous utilisons ici les [alias SQL](https://www.ionos.fr/digitalguide/serveur/configuration/alias-sql/) pour afficher les résultats sous forme de « nombre ».

## L’instruction en combinaison avec `SUM()`

Dans l’exemple suivant, nous utilisons SQL `GROUP BY` en combinaison avec `SUM()` pour déterminer et afficher combien d’articles ont été commandés depuis Strasbourg. Pour cela, nous utilisons ce code :

```sql
SELECT Ville, SUM(Articles) AS Total
FROM Liste des clients
WHERE Ville = 'Strasbourg'.
GROUP BY Ville;
```

Nous obtenons comme résultat :

<table>
  <thead>
    <tr>
      <th>Ville</th>
      <th>Total</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Strasbourg</td>
      <td>24</td>
    </tr>
  </tbody>
</table>

## Application avec `ORDER BY`

Une combinaison avec `ORDER BY` est également possible. Dans ce cas, nous trions notre tableau en fonction du nombre le plus élevé d’articles commandés par client et par ville. Nous commençons par la ville dans laquelle un client a acheté le plus d’articles. Le code correspondant, pour lequel nous combinons SQL `GROUP BY` avec la fonction `MAX()` et `ORDER BY`, est le suivant :

```sql
SELECT Ville, MAX(Articles) AS Quantité (ordre décroissant)
FROM Liste des clients
GROUP BY Ville ORDER BY Quantité DESC;
```

La sortie correspondante est alors la suivante :

<table>
  <thead>
    <tr>
      <th>Ville</th>
      <th>Quantité (ordre décroissant)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Lille</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Strasbourg</td>
      <td>15</td>
    </tr>
    <tr>
      <td>Paris</td>
      <td>13</td>
    </tr>
  </tbody>
</table>

## Combinaison avec l’instruction `HAVING`

Vous pouvez également combiner SQL `GROUP BY` avec [SQL `HAVING`](https://www.ionos.fr/digitalguide/serveur/configuration/sql-having/). Dans l’exemple suivant, nous retirons de la liste les clients dont le numéro de client est inférieur à 1300. Nous trions les autres personnes en fonction du nombre d’articles qu’elles ont commandés, dans l’ordre croissant. Voici à quoi ressemble le code :

```sql
SELECT Ville, Numéro de client, MIN(Articles) AS Quantité (ordre croissant)
FROM Liste des clients
GROUP BY Ville, Numéro de client HAVING Numéro de client > 1300;
```

Nous obtenons ainsi ce tableau comme nouvelle sortie :

<table>
  <thead>
    <tr>
      <th>Ville</th>
      <th>Numéro de client</th>
      <th>Quantité (ordre croissant)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Strasbourg</td>
      <td>1377</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Paris</td>
      <td>1427</td>
      <td>13</td>
    </tr>
    <tr>
      <td>Lille</td>
      <td>1431</td>
      <td>22</td>
    </tr>
  </tbody>
</table>

## Alternatives à SQL `GROUP BY`

Une alternative populaire à SQL `GROUP BY` est l’instruction `PARTITION BY`. La différence est que toutes les valeurs d’origine sont conservées et affichées. De plus, de nombreuses **fonctions d’agrégation** mentionnées plus haut fonctionnent également sans SQL `GROUP BY`.

Conseil Une base de données sur mesure : avec le [serveur d’hébergement SQL](https://www.ionos.fr/cloud/hebergement-serveur-sql "Hébergement SQL pour les bases de données MSSQL, MySQL et MariaDB | IONOS") de IONOS, vous n’avez pas seulement le choix entre MSSQL, MySQL ou MariaDB, mais vous bénéficiez dans tous les cas d’une performance exceptionnelle, de fonctions de sécurité puissantes et d’un conseil personnalisé.


This is a markdown version of: [https://www.ionos.fr/digitalguide/serveur/configuration/sql-group-by/](https://www.ionos.fr/digitalguide/serveur/configuration/sql-group-by/) for AI/LLM consumption.