Fonctions SQL avancées
Les fonctions d’agrégation permettent de calculer des valeurs à partir d’un ensemble de lignes. Elles sont souvent utilisées avec GROUP BY et HAVING.
1. COUNT()
Compte le nombre de lignes.
SELECT COUNT(*) AS NombreClients
FROM Clients;
2. SUM()
Calcule la somme d’une colonne numérique.
SELECT SUM(Montant) AS TotalVentes
FROM Commandes;
3. AVG()
Calcule la moyenne.
SELECT AVG(Montant) AS MontantMoyen
FROM Commandes;
4. MIN() et MAX()
Renvoient respectivement la plus petite et la plus grande valeur.
SELECT MIN(Prix) AS PrixMin, MAX(Prix) AS PrixMax
FROM Produits;
5. GROUP BY
Permet de regrouper les résultats par valeur commune.
Exemple : total des commandes par client
SELECT ClientID, SUM(Montant) AS Total
FROM Commandes
GROUP BY ClientID;
6. HAVING
Filtre les groupes (contrairement à WHERE qui filtre les lignes).
Exemple : clients ayant dépensé plus de 100€
SELECT ClientID, SUM(Montant) AS Total
FROM Commandes
GROUP BY ClientID
HAVING SUM(Montant) > 100;
7. Exemple complet
Tables utilisées :
Clients
-------------------------
ID | Nom
1 | Alice
2 | Bob
3 | Clara
Commandes
-------------------------
NumCommande | ClientID | Montant
101 | 1 | 120
102 | 2 | 80
103 | 1 | 45
104 | 3 | 200
1. Total dépensé par client
SELECT Clients.Nom, SUM(Commandes.Montant) AS Total
FROM Clients
JOIN Commandes ON Clients.ID = Commandes.ClientID
GROUP BY Clients.Nom;
2. Clients ayant dépensé plus de 150€
SELECT Clients.Nom, SUM(Commandes.Montant) AS Total
FROM Clients
JOIN Commandes ON Clients.ID = Commandes.ClientID
GROUP BY Clients.Nom
HAVING SUM(Commandes.Montant) > 150;
3. Nombre de commandes par client
SELECT ClientID, COUNT(*) AS NbCommandes
FROM Commandes
GROUP BY ClientID;
8. Résumé
- COUNT() : compter les lignes
- SUM() : somme
- AVG() : moyenne
- MIN() / MAX() : minimum / maximum
- GROUP BY : regrouper les résultats
- HAVING : filtrer les groupes