Clause GROUP BY

GROUP BY est utilisé (souvent avec des fonctions d’agrégation) pour grouper des lignes sélectionnées par les valeurs d'une ou plusieurs colonnes ou expressions.
Une ligne est retournée pour chaque groupe.
Exemple1 : Nombre d’avions par marque
SELECT Marque, COUNT(av#)
FROM Avion
GROUP BY Marque
Remarque : Nous basons le comptage sur la clef primaire av# car elle ne peut être NULL. COUNT ne prend pas en compte les valeurs NULL.
SELECT Marque, COUNT(*)
FROM Avion
GROUP BY Marque
Renommer la nouvelle colonnes (alias)
SELECT Marque, COUNT(*) [Nombre d'avions]
FROM Avion
GROUP BY Marque
Exemple2 : Nombre d’avions par marque en commençant par la marque ayant le plus grand nombre d’avions
SELECT Marque, COUNT(*) [Nombre d'avions]
FROM Avion
GROUP BY Marque
ORDER BY [Nombre d'avions] DESC
Ou écrire:
SELECT Marque, COUNT(*) [Nombre d'avions]
FROM Avion
GROUP BY Marque
ORDER BY COUNT(*) DESC
Exemple3 : Nombre d’avions par marque et type d’avion
SELECT Marque, TypeAvion, COUNT(*) [Nombre d'avions]
FROM Avion
GROUP BY Marque, TypeAvion
Exemple4 : Nombre, dans l’ordre décroissant, d’avions localisés à Paris par marque et type d’avion
SELECT Marque, TypeAvion, COUNT(*) [Nombre d'avions]
FROM Avion
WHERE localisation = 'Paris'
GROUP BY Marque, TypeAvion
ORDER BY [Nombre d'avions] DESC

Fonctions d’agrégation (fonctions récapitulatives)

FonctionRôle
SUMSomme des valeurs de l’attribut
MINMinimum des valeurs de l’attribut
MAXMaximum des valeurs de l’attribut
AVGMoyenne des valeurs de l’attribut
COUNTNombre d’enregistrements du groupe
Exemple5 : Capacité maximum par marque d’avion
SELECT Marque, MAX(capacite) [Capacité maximum]
FROM avion
GROUP BY Marque
Exemple6 : Capacité minimum par marque d’avion
SELECT Marque, MIN(capacite) [Capacité minimum]
FROM avion
GROUP BY Marque
Exemple7 : Capacité minimum et capacité maximum par marque d’avion
SELECT Marque, MIN(capacite) [Capacité minimum], MAX(capacite) [Capacité maximum],
FROM avion
GROUP BY Marque
Exemple 8 : Moyenne des capacités par marque d’avion
SELECT Marque, AVG(capacite) [Moyenne des capacités]
FROM avion
GROUP BY Marque
Exemple9 : Somme des capacités par marque d’avion
SELECT Marque, SUM(capacite) [Somme des capacités]
FROM avion
GROUP BY Marque

Fonctions d’agrégation sans GROUP BY

Sans la clause GROUP BY, les fonctions d’agrégation s’applique au seul groupe des toutes les lignes du résultat.
Exemple10 : Nombre d’avions
SELECT COUNT(av#) [Nombre d'avions] FROM avion
Exemple11 : minimum de capacité des avion
SELECT MIN(capacite) [Min Capacité] FROM avion

Clause HAVING

La clause HAVING permet de créer un filtre appliqué sur les regroupements de lignes
Généralement utilisée avec GROUP BY
Remarque : Sans la clause GROUP BY, la clause HAVING se comporte comme un WHERE
Exemple1 : Nombre d’avions par marque pour les marques ayant plus qu’un seul avion
SELECT Marque, COUNT(*) [Nombre d'avions]
FROM Avion
GROUP BY Marque
HAVING COUNT(*) > 1
Remarque : Les alias de colonnes ne sont pas reconnues dans les clauses WHERE, GROUP BY et HAVING
SELECT Marque [La marque], COUNT(*) [Nombre d'avions]
FROM Avion
GROUP BY [La marque]
HAVING [Nombre d'avions]
Remarque : Les fonctions d’agrégation ne sont pos acceptées dans l’expression de groupement
SELECT Marque, COUNT(*) [Nombre d'avions]
FROM Avion
GROUP BY MIN(Capacite)
Exemple2 : Nombre d’avions par marque pour les marques dont la capacité minimum des avions est supérieure à 250
SELECT Marque, COUNT(*) [Nombre d'avions]
FROM Avion
GROUP BY Marque
HAVING MIN(capacite) > 250
Pour plus comprendre : TP + correction

Aucun commentaire :

Enregistrer un commentaire