5.1 Déclaration AVOIR
Il existe un autre opérateur utile en SQL qui est utilisé avec GROUP BY
, il s'appelle HAVING
.
Dans sa signification, il est complètement analogue à l'opérateur WHERE
. Il vous permet uniquement WHERE
de définir un filtre de ligne avant le regroupement, et avec l'aide, HAVING
vous pouvez définir un filtre qui est appliqué aux enregistrements après le regroupement.
La vue générale de la requête lors de l'utilisation du regroupement et du filtrage des résultats de regroupement est la suivante :
SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition
HAVING
ne peut être utilisé que si la requête contient GROUP BY
.
Écrivons une requête où nous affichons le nombre d'employés embauchés par année.
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Et le résultat de cette requête :
location_année | total |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Et maintenant, nous en excluons les années où un ou moins d'employés ont été embauchés. Exemple:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1
Et le résultat de cette requête :
location_année | total |
---|---|
2015 | 2 |
5.3 Ordre d'exécution des relevés
Pour écrire des requêtes SQL correctes et efficaces, vous devez comprendre comment elles sont exécutées par le serveur SQL.
La procédure d'exécution des actions est strictement réglementée et ne dépend pas de votre désir. Vous ne pouvez pas réorganiser les opérateurs et obtenir un ordre différent.
La requête SQL est exécutée en plusieurs étapes dans cet ordre.
- Étape 1 - récupération des lignes
- Tout d'abord, toutes les lignes de la table spécifiée sont sélectionnées.
- Ensuite, des champs calculés leur sont ajoutés.
- Et puis de toutes les lignes, il ne reste que celles qui satisfont la condition
WHERE
- Étape 2 - regroupement
- Le regroupement est ensuite appliqué aux résultats.
- Lors du regroupement, des champs tels que
COUNT(*)
. - Enfin, un filtre est appliqué au résultat du regroupement
HAVING
. - Étape 3 - tri
- Les lignes obtenues aux étapes précédentes sont triées à l'aide de
ORDER BY
.
Enfin, le résultat peut être ajusté avec LIMIT
et OFFSET
.
GO TO FULL VERSION