Ordre de résolution des requête SQL
Fondamental :
L'ordre de résolution standard d'une requête SQL est :
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
Attention : Usage des alias dans le GROUP BY ou le HAVING : requête non standard, acceptée par certains SGBD
SELECT substring(name,1,1) AS initiale, count(citycode)
FROM city
GROUP BY initiale;
initiale | count
----------+-------
L | 1
Z | 1
B | 1
M | 1
P | 2
A | 1
La requête n'est pas standard, les résolutions de l'alias et de la fonction substring sont dans le SELECT, qui est postérieur à la résolution du GROUP BY. Postgres acceptera néanmoins cette syntaxe, ce qui évite de créer une vue ou d'utiliser une sous-requête.
Remarque : Restriction
Une restriction peut être appliquée avant calcul de l'agrégat, au niveau de la clause WHERE, portant ainsi sur la relation de départ, mais aussi après calcul de l'agrégat sur les résultats de ce dernier, au niveau de la clause HAVING.
Remarque : Utilisation de fonctions d'agrégation
Les fonctions d'agrégation peuvent être utilisées dans la claude HAVING ou dans la clause ORDER BY. Les fonctions ne peuvent pas être utilisées dans la clause WHERE (qui est résolu avant le GROUP BY).