23 Exercices Sur Les Requêtes SQL Corrigé: Fonctions d’agrégation

La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec SQL. Nous espérons que ces exercices vous aideront à améliorer vos compétences en SQL. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!

Vous pouvez lire notre tutoriel SQL avant de résoudre les exercices suivants.

 
 

Exercices Sur Les Requêtes SQL Corrigé : Fonctions d’agrégation

1. A partir du table suivante, écrivez une requête SQL pour calculer le montant total des achats de toutes les commandes. Renvoyez le montant total des achats.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT SUM(montant_achat) FROM commandes;

Sortie de la requête :

          sum
-------------
       602.92

 

2. A partir du table suivante, écrivez une requête SQL pour calculer le montant d’achat moyen de toutes les commandes. Retourner le montant moyen des achats.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT AVG(montant_achat) FROM commandes;

Sortie de la requête :

          avg
-------------
       100.86

 

3. À partir du table suivant, écrivez une requête SQL qui compte le nombre de clients uniques. Renvoyez le nombre de clients.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT COUNT(DISTINCT client_id) FROM commandes;

Sortie de la requête :

        count
-------------
            4

 

 
 
4. À partir du table suivant, écrivez une requête SQL pour compter le nombre de clients. Retourner le nombre de clients.

Table: clients

+-----------+----------------+-------------+--------+
| client_id |       nom      |    ville    |  age   |
+-----------+----------------+-------------+--------+
|    1001   | Alex Barbara   | Paris       |  25    |
|    1002   | Lois Collins   | Lyon        |  30    |
|    1005   | Karen Farley   | Nice        |  44    |
|    1006   | Kevin Thompson | Paris       |  65    |
|    1007   | Scott Henry    | Marseille   |  32    |
|    1003   | Ellen McMullen | Montpellier |  53    |
+-----------+----------------+-------------+--------+
SELECT COUNT(*) FROM clients;

Sortie de la requête :

        count
-------------
            6

 

5. À partir du table suivant, écrivez une requête SQL pour compter le nombre de clients dont l’age est indiqué.

Table: clients

+-----------+----------------+-------------+--------+
| client_id |       nom      |    ville    |  age   |
+-----------+----------------+-------------+--------+
|    1001   | Alex Barbara   | Paris       |  25    |
|    1002   | Lois Collins   | Lyon        |  30    |
|    1005   | Karen Farley   | Nice        |  44    |
|    1006   | Kevin Thompson | Paris       |  65    |
|    1007   | Scott Henry    | Marseille   |        |
|    1003   | Ellen McMullen | Montpellier |        |
+-----------+----------------+-------------+--------+
Cette requête compte le nombre total de lignes où la colonne ‘age’ n’est pas NULL dans la table ‘clients’.

SELECT COUNT(ALL age) FROM clients;

Sortie de la requête :

        count
-------------
            4

 

6. A partir du table suivant, écrivez une requête SQL pour trouver le montant maximum d’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT MAX(montant_achat) FROM commandes;

Sortie de la requête :

          max
-------------
       188.22

 

 
 
7. A partir du table suivante, écrivez une requête SQL pour trouver le montant minimum d’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT MIN(montant_achat) FROM commandes;

Sortie de la requête :

          min
-------------
       59.32

 

8. A partir du table suivante, écrivez une requête SQL pour trouver l’age le plus grand des clients dans chaque ville. Retourner ville, age maximale.

Table: clients

+-----------+----------------+-------------+--------+
| client_id |       nom      |    ville    |  age   |
+-----------+----------------+-------------+--------+
|    1001   | Alex Barbara   | Paris       |  25    |
|    1002   | Lois Collins   | Lyon        |  30    |
|    1002   | Bob Chamir     | Lyon        |  70    |
|    1005   | Karen Farley   | Nice        |  44    |
|    1006   | Kevin Thompson | Paris       |  65    |
|    1007   | Scott Henry    | Marseille   |  32    |
|    1003   | Ellen McMullen | Montpellier |  53    |
+-----------+----------------+-------------+--------+
SELECT ville, MAX(age)
FROM clients
GROUP BY ville;

Sortie de la requête :

+-------------+--------+
|    ville    |  max   |
+-------------+--------+
| Paris       |  65    |
| Lyon        |  70    |
| Nice        |  44    |
| Marseille   |  32    |
| Montpellier |  53    |
+-------------+--------+

 

9. À partir du table suivante, écrivez une requête SQL pour trouver le montant d’achat le plus élevé commandé par chaque client. Retournez l’ID du client, le montant maximum de l’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT client_id, MAX(montant_achat)
FROM commandes
GROUP BY client_id;

Sortie de la requête :

+-----------+-----------+
| client_id |    max    |
+-----------+-----------+
|  1005     |   125.02  |
|  1002     |   95.65   |
|  1006     |   74.33   |
|  1003     |   188.22  |
+-----------+-----------+

 

 
 
10. À partir du table suivante, écrivez une requête SQL pour trouver le montant d’achat le plus élevé commandé par chaque client à une date donnée. Retournez la date de la commande et le montant d’achat le plus élevé.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT client_id, date_cmd, MAX(montant_achat)
FROM commandes
GROUP BY client_id, date_cmd;

Sortie de la requête :

+-----------+-------------+-------------+
| client_id |  date_cmd   |     max     |
+-----------+-------------+-------------+
|  1005     | 2024-10-06  |    125.02   |
|  1005     | 2024-02-22  |    60.38    |
|  1002     | 2024-05-11  |    95.65    |
|  1006     | 2024-12-22  |    59.32    |
|  1006     | 2024-11-30  |    74.33    |
|  1003     | 2024-01-05  |    188.22   |
+-----------+-------------+-------------+

 

11. A partir du table suivant, écrivez une requête SQL pour déterminer le montant d’achat le plus élevé effectué par chaque client le ‘2024-10-06’. Retourner l’ID du client, le montant de l’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-10-06  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-10-06  |  1003     |
+--------+----------------+-------------+-----------+
SELECT client_id, MAX(montant_achat)
FROM commandes
WHERE date_cmd = '2024-10-06'
GROUP BY client_id;

Sortie de la requête :

+-----------+-----------+
| client_id |    max    |
+-----------+-----------+
|  1005     |   125.02  |
|  1005     |   60.38   |
|  1003     |   188.22  |
+-----------+-----------+

 

12. À partir du table suivante, écrivez une requête SQL pour trouver le montant d’achat le plus élevé pour chaque client à une date donnée. Filtrez le résultat en fonction du montant d’achat le plus élevé, supérieur à 100,00. Retournez l’identifiant du client, la date de la commande et le montant maximum de l’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT client_id, date_cmd, MAX(montant_achat)
FROM commandes
GROUP BY client_id, date_cmd
HAVING MAX(montant_achat) > 100.00;

Sortie de la requête :

+-----------+-------------+-------------+
| client_id |  date_cmd   |     max     |
+-----------+-------------+-------------+
|  1005     | 2024-10-06  |    125.02   |
|  1003     | 2024-01-05  |    188.22   |
+-----------+-------------+-------------+

 

 
 
13. À partir du table suivant, écrivez une requête SQL pour trouver le montant d’achat le plus élevé dans l’intervalle 50 – 100 (les valeurs de début et de fin sont incluses) en fonction de chaque client et de la date de la commande. Retournez l’identifiant du client, la date de la commande et le montant maximum de l’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT client_id, date_cmd, MAX(montant_achat)
FROM commandes
GROUP BY client_id, date_cmd
HAVING MAX(montant_achat) BETWEEN 50 AND 100;

Sortie de la requête :

+-----------+-------------+-------------+
| client_id |  date_cmd   |     max     |
+-----------+-------------+-------------+
|  1005     | 2024-02-22  |     60.38   |
|  1002     | 2024-05-11  |     95.65   |
|  1006     | 2024-12-22  |     59.32   |
|  1006     | 2024-11-30  |     74.33   |
+-----------+-------------+-------------+

 

14. À partir du table suivante, écrivez une requête SQL pour trouver le montant d’achat le plus élevé pour chaque client à une date donnée. Filtrez les lignes pour lesquelles le montant d’achat le plus élevé est soit 100, 200, 300, 400. Retournez l’identifiant du client, la date de la commande et le montant maximum de l’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-02-22  |  1005     |
| 8003   | 200            | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1006     |
| 8006   | 188.22         | 2024-01-05  |  1003     |
+--------+----------------+-------------+-----------+
SELECT client_id, date_cmd, MAX(montant_achat)
FROM commandes
GROUP BY client_id, date_cmd
HAVING MAX(montant_achat) IN (100, 200, 300, 400);

Sortie de la requête :

+-----------+-------------+-------------+
| client_id |  date_cmd   |     max     |
+-----------+-------------+-------------+
|  1002     | 2024-05-11  |     200     |
+-----------+-------------+-------------+

 

15. À partir du table suivante, écrivez une requête SQL pour déterminer le montant d’achat le plus élevé pour chaque client. L’identifiant du client doit être compris entre 1000 et 1004 (les valeurs de début et de fin sont incluses). Retournez l’identifiant du client et le montant maximum de l’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-10-06  |  1004     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1000     |
| 8006   | 188.22         | 2024-10-06  |  1000     |
+--------+----------------+-------------+-----------+
SELECT client_id, MAX(montant_achat)
FROM commandes
WHERE client_id BETWEEN 1000 AND 1004
GROUP BY client_id;

Sortie de la requête :

+-----------+-----------+
| client_id |    max    |
+-----------+-----------+
|  1004     |   60.38   |
|  1002     |   95.65   |
|  1000     |   188.22  |
+-----------+-----------+

 

 
 
16. À partir du table suivante, écrivez une requête SQL pour déterminer le montant d’achat le plus élevé pour chaque client. L’identifiant du client doit être compris entre 1000 et 1004 (les valeurs de début et de fin sont incluses). Filtrer les lignes pour lesquelles le montant maximum d’achat est inférieur à 100. Retournez l’identifiant du client et le montant maximum de l’achat.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-10-06  |  1004     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1000     |
| 8006   | 188.22         | 2024-10-06  |  1000     |
+--------+----------------+-------------+-----------+
SELECT client_id, MAX(montant_achat)
FROM commandes
WHERE client_id BETWEEN 1000 AND 1004
GROUP BY client_id
HAVING MAX(montant_achat) < 100;

Sortie de la requête :

+-----------+-----------+
| client_id |    max    |
+-----------+-----------+
|  1004     |   60.38   |
|  1002     |   95.65   |
+-----------+-----------+

 

17. A partir du table suivante, écrivez une requête SQL pour compter toutes les commandes générées le '2024-10-06'. Renvoyez le nombre de commandes.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-10-06  |  1004     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1000     |
| 8006   | 188.22         | 2024-10-06  |  1000     |
+--------+----------------+-------------+-----------+
SELECT COUNT(*)
FROM commandes
WHERE date_cmd = '2024-10-06';

Sortie de la requête :

        count
-------------
            3

 

18. A partir du table suivante, écrivez une requête SQL pour compter le nombre de clients dans une ville. Retourner le nombre de clients.

Table: clients 

+-----------+----------------+-------------+--------+
| client_id |       nom      |    ville    |  age   |
+-----------+----------------+-------------+--------+
|    1001   | Alex Barbara   | Paris       |  25    |
|    1002   | Lois Collins   | Lyon        |  30    |
|    1005   | Karen Farley   | Nice        |  44    |
|    1006   | Kevin Thompson | Paris       |  65    |
|    1007   | Scott Henry    | Marseille   |  32    |
|    1003   | Ellen McMullen | Montpellier |  53    |
+-----------+----------------+-------------+--------+
SELECT COUNT(*)
FROM clients 
WHERE ville IS NOT NULL;

Sortie de la requête :

        count
-------------
            6

 

19. À partir du table suivante, écrivez une requête SQL pour compter le nombre de commandes en fonction de la combinaison de chaque date de commande et de chaque client. Retourner la date de la commande, l'identifiant du client.

Table: commandes

+--------+----------------+-------------+-----------+
| cmd_id | montant_achat  |  date_cmd   | client_id |
+--------+----------------+-------------+-----------+
| 8001   | 125.02         | 2024-10-06  |  1005     |
| 8002   | 60.38          | 2024-10-06  |  1004     |
| 8003   | 95.65          | 2024-05-11  |  1002     |
| 8004   | 59.32          | 2024-12-22  |  1006     |
| 8005   | 74.33          | 2024-11-30  |  1000     |
| 8006   | 188.22         | 2024-10-06  |  1000     |
+--------+----------------+-------------+-----------+
SELECT date_cmd, client_id, COUNT(*)
FROM commandes
GROUP BY date_cmd, client_id;

Sortie de la requête :

+-------------+-----------+-----------+
|  date_cmd   | client_id |   count   |
+-------------+-----------+-----------+
| 2024-10-06  |  1005     |     1     |
| 2024-10-06  |  1004     |     1     |
| 2024-05-11  |  1002     |     1     |
| 2024-12-22  |  1006     |     1     |
| 2024-11-30  |  1000     |     1     |
| 2024-10-06  |  1000     |     1     |
+-------------+-----------+-----------+

 

 
 
20. A partir du table suivante, écrivez une requête SQL pour calculer le prix moyen des produits. Renvoyez le prix moyen du produit.

Table: produits

+---------+-------------+------------+--------+
| prod_id |  prod_name  | prod_price | com_id |
+---------+-------------+------------+--------+
| 1001    | Monitor     | 150.00     |  8     |
| 1002    | CPU         | 250.00     |  8     |
| 1003    | Keyboard    | 300.00     |  6     |
| 1004    | Mouse       | 177.00     |  2     |
| 1005    | Printer     | 255.00     |  9     |
| 1006    | Scanner     | 270.00     |  3     |
+---------+-------------+------------+--------+
SELECT AVG(prod_price) AS "Prix Moyen"
FROM produits;

Sortie de la requête :

Prix Moyen
--------------
           200

 

21. A partir du table suivant, écrivez une requête SQL pour compter le nombre de produits dont le prix est supérieur ou égal à 250. Retourner le nombre de produits.

Table: produits

+---------+-------------+------------+--------+
| prod_id |  prod_name  | prod_price | com_id |
+---------+-------------+------------+--------+
| 1001    | Monitor     | 150.00     |  8     |
| 1002    | CPU         | 250.00     |  8     |
| 1003    | Keyboard    | 300.00     |  6     |
| 1004    | Mouse       | 177.00     |  2     |
| 1005    | Printer     | 255.00     |  9     |
| 1006    | Scanner     | 270.00     |  3     |
+---------+-------------+------------+--------+
SELECT COUNT(*) AS "Nombre de produits"
FROM produits
WHERE prod_price >= 250;

Sortie de la requête :

Nombre de produits
-------------------
                  4

 

22. À partir du table suivante, écrivez une requête SQL pour calculer le prix moyen pour des commandes uniques. Retournez le prix moyen et l'identifiant de la commande.

Table: produits

+---------+-------------+------------+--------+
| prod_id |  prod_name  | prod_price | com_id |
+---------+-------------+------------+--------+
| 1001    | Monitor     | 150.00     |  8     |
| 1002    | CPU         | 250.00     |  8     |
| 1003    | Keyboard    | 300.00     |  6     |
| 1004    | Mouse       | 177.00     |  2     |
| 1005    | Printer     | 255.00     |  9     |
| 1006    | Scanner     | 270.00     |  3     |
+---------+-------------+------------+--------+
SELECT AVG(prod_price) AS "Prix moyen", com_id
FROM produits
GROUP BY com_id;

Sortie de la requête :

+------------+--------+
| Prix moyen | com_id |
+------------+--------+
| 200.00     |  8     |
| 300.00     |  6     |
| 177.00     |  2     |
| 255.00     |  9     |
| 270.00     |  3     |
+------------+--------+

 

23. A partir du table suivante, écrivez une requête SQL pour compter le nombre d'employés dans chaque département. Renvoyez le code du département et le nombre d'employés.

Table: employee

+------+---------+----------+----------------+
|  id  |   nom   |  prenom  | departement_id |
+------+---------+----------+----------------+
| 1001 | Eddie   | Parker   |  101           |
| 1002 | Eleanor | Deas     |  109           |
| 1003 | Glen    | Powell   |  101           |
| 1004 | Ali     | Fawaz    |  102           |
| 1005 | Earl    | Horn     |  103           |
| 1006 | Bryan   | Savoy    |  103           |
+------+---------+----------+----------------+
SELECT departement_id, COUNT(*)
FROM employee
GROUP BY departement_id;

Sortie de la requête :

+----------------+--------+
| departement_id |  count |
+----------------+--------+
| 101            |  2     |
| 109            |  1     |
| 102            |  1     |
| 103            |  2     |
+----------------+--------+

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *