Agrégations
1 Données utilisées
id_joueuse | nom | prenom | elo | ville_club |
---|---|---|---|---|
1 | Guichard | Pauline | 2357 | Asnieres |
2 | Daulyte | Deimante | 2371 | Chartres |
3 | Navrotescu | Andreea | 2338 | Asnieres |
4 | Sebag | Marie | 2448 | Bischwiller |
5 | Millet | Sophie | 2366 | Asnieres |
6 | Skrichempko | Almira | 2361 | Bischwiller |
j’ai intégré ici le club pour faciliter les choses
2 Questions
Quelques questions que l’on peut se poser :
- Quel est le id_joueuse maximum ?
- Quel est le nombre de joueuses ?
- Quelle est la moyenne elo par club ?
3 Compter les lignes
SELECT COUNT(*)
FROM echecs.joueuse
WHERE elo < 2400;
count |
---|
5 |
SELECT COUNT(DISTINCT prenom)
FROM echecs.joueuse;
count |
---|
6 |
J’utilise souvent COUNT(1) -> c’est pareil
Compter avec un filtre
L’opérateur FILTER
permet de calculer une agrégation conditionnelle.
SELECT COUNT(*) FILTER (WHERE elo BETWEEN 2300 AND 2399) AS niv_fm,
COUNT(*) FILTER (WHERE elo BETWEEN 2400 AND 2499) AS niv_im
FROM echecs.joueuse;
niv_fm | niv_im |
---|---|
5 | 1 |
4 Somme
SELECT SUM(elo)
FROM echecs.joueuse;
sum |
---|
14223 |
SELECT SUM(elo) / COUNT(elo)
FROM echecs.joueuse;
5 Stats descriptives
SELECT MAX(elo),
MIN(elo),
AVG(elo)
FROM echecs.joueuse;
max | min | avg |
---|---|---|
2448 | 2338 | 2373.5 |
Vous pouvez également calculer : VARIANCE
, STDDEV
.
Comment afficher la joueuse avec le plus grand elo ? 😵
Sous-requête
En utilisant une sous-requête :
SELECT MAX(elo) FROM echecs.joueuse
➡️ renvoie un nombre- Nous pouvons ensuite tester si elo est égal à ce nombre
SELECT nom,
prenom,
eloFROM echecs.joueuse
WHERE elo = (SELECT MAX(elo) FROM echecs.joueuse);
6 Regroupement
Comment obtenir la moyenne elo par club ?
SELECT ville_club, -- Supposons que la table joueuse a un attribut ville_club
AVG(elo)
FROM echecs.joueuse
GROUP BY ville_club;
ville_club | avg_elo |
---|---|
Asnieres | 2372.4 |
Chartres | 2371.0 |
Bischwiller | 2404.5 |
J’ai mis ville_club car id_club c’est moins joli et on verra les jointures ensuite.
Vous pouvez utiliser ROUND() pour arrondir.
Colonnes du GROUP BY
Vous pouvez grouper en utilisant plusieurs colonnes.
Les colonnes présentes dans le SELECT doivent impérativement être présentes dans le GROUP BY.
L’inverse n’est pas vrai. Vous pouvez avoir des colonnes du GROUP BY que vous n’affichez pas dans le SELECT.
je dis bien colonnes et pas fonctions d’aggrégation
Filtrer suite au GROUP BY
Comment faire pour afficher uniquement les clubs où la moyenne élo est inférieure à 2400 ?
SELECT ville_club,
AVG(elo)
FROM echecs.joueuse
GROUP BY ville_club
HAVING AVG(elo) < 2400;
club | avg_elo |
---|---|
Asnieres | 2372.4 |
Chartres | 2371.0 |
Having Vs Where
- WHERE - Filtre Avant l’Agrégation
- HAVING - Filtre Après l’Agrégation