Résumer : GROUP BY
Les fonctions d'agrégation
| Fonction | Résultat |
|---|---|
COUNT(*) |
le nombre de lignes |
SUM(colonne) |
la somme |
AVG(colonne) |
la moyenne (average) |
MIN(colonne), MAX(colonne) |
le plus petit, le plus grand |
ROUND(x) |
arrondit ; ROUND(x, 2) à 2 chiffres après la virgule |
SELECT COUNT(*), SUM(quantite * prix_unitaire)
FROM ventes;
Résultat : une seule ligne, (42, 142050). Tout le chiffre d'affaires du projet, en une requête.
GROUP BY
SELECT produit, SUM(quantite * prix_unitaire) AS ca
FROM ventes
GROUP BY produit
ORDER BY ca DESC;
WHERE ou HAVING ?
SELECT vendeur, COUNT(*) AS n
FROM ventes
WHERE produit = 'riz' -- seulement les ventes de riz
GROUP BY vendeur
HAVING n >= 5; -- seulement les vendeurs qui en ont fait au moins 5
-- commence un commentaire en SQL, comme # en Python.
L'ordre complet devient :
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...;
Exercice : Le résumé en une ligne
Écris une requête qui renvoie, sur une seule ligne : le nombre de ventes, le chiffre d'affaires total, et le panier moyen arrondi à l'entier (ROUND de la moyenne des montants).
Voir une solution
import sqlite3
conn = sqlite3.connect(":memory:")
conn.executescript(open("boutique.sql", encoding="utf-8").read())
requete = """
SELECT COUNT(*), SUM(quantite * prix_unitaire), ROUND(AVG(quantite * prix_unitaire))
FROM ventes
"""
resultat = conn.execute(requete).fetchall()
for ligne in resultat:
print(ligne)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Le chiffre d'affaires par mois
Écris une requête qui donne, pour chaque mois, le mois (AAAA-MM) et le chiffre d'affaires, dans l'ordre des mois.
Voir une solution
import sqlite3
conn = sqlite3.connect(":memory:")
conn.executescript(open("boutique.sql", encoding="utf-8").read())
requete = """
SELECT substr(date, 1, 7) AS mois, SUM(quantite * prix_unitaire)
FROM ventes
GROUP BY mois
ORDER BY mois
"""
resultat = conn.execute(requete).fetchall()
for ligne in resultat:
print(ligne)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Les vendeurs les plus actifs
Écris une requête qui donne le nom et le nombre de ventes de chaque vendeur qui a fait au moins 13 ventes, du plus actif au moins actif.
Voir une solution
import sqlite3
conn = sqlite3.connect(":memory:")
conn.executescript(open("boutique.sql", encoding="utf-8").read())
requete = """
SELECT vendeur, COUNT(*) AS n
FROM ventes
GROUP BY vendeur
HAVING n >= 13
ORDER BY n DESC
"""
resultat = conn.execute(requete).fetchall()
for ligne in resultat:
print(ligne)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Teste-toi
On veut les produits dont le chiffre d'affaires dépasse 30 000 FCFA. Où se place la condition ?
WHERE SUM(quantite * prix_unitaire) > 30000HAVING SUM(quantite * prix_unitaire) > 30000, aprèsGROUP BY produit(bonne réponse)ORDER BY 30000LIMIT 30000