L'ordre de résolution standard d'une requête SQL est :
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
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.
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.