Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pourquoi ne puis-je pas utiliser un alias pour un agrégat dans une clause having ?

Le HAVING la clause est évaluée avant le SELECT - donc le serveur ne connaît pas encore cet alias.

  1. Tout d'abord, le produit de toutes les tables dans le FROM clause est formée.

  2. Le WHERE La clause est ensuite évaluée pour éliminer les lignes qui ne satisfont pas à la condition de recherche.

  3. Ensuite, les lignes sont regroupées à l'aide des colonnes du GROUP BY clause.

  4. Ensuite, les groupes qui ne satisfont pas la search_condition dans le HAVING clause sont éliminées.

  5. Ensuite, les expressions dans le SELECT la liste cible des instructions est évaluée.

  6. Si le DISTINCT mot-clé présent dans la clause select, les lignes en double sont maintenant éliminées.

  7. L'UNION est prise après l'évaluation de chaque sous-sélection.

  8. Enfin, les lignes résultantes sont triées selon les colonnes spécifiées dans le ORDER BY clause.

  9. TOP clause est exécutée.

J'espère que ça répond à ta question. En outre, il explique pourquoi l'alias fonctionne dans ORDER BY clause.