sql >> Database >  >> RDS >> Sqlserver

Waarom kan ik geen alias gebruiken voor een aggregaat in een hebbende clausule?

De HAVING clausule wordt geëvalueerd vóór de SELECT - dus de server kent die alias nog niet.

  1. Ten eerste, het product van alle tabellen in de FROM clausule wordt gevormd.

  2. De WHERE clausule wordt vervolgens geëvalueerd om rijen te elimineren die niet voldoen aan de zoekvoorwaarde.

  3. Vervolgens worden de rijen gegroepeerd met behulp van de kolommen in de GROUP BY clausule.

  4. Dan, groepen die niet voldoen aan de search_condition in de HAVING clausule worden geëlimineerd.

  5. Vervolgens de uitdrukkingen in de SELECT lijst met doelen voor uitspraken worden geëvalueerd.

  6. Als de DISTINCT trefwoord aanwezig is in de select-clausule, dubbele rijen zijn nu geëlimineerd.

  7. De UNION wordt genomen nadat elke subselectie is geëvalueerd.

  8. Ten slotte worden de resulterende rijen gesorteerd volgens de kolommen die zijn gespecificeerd in de ORDER BY clausule.

  9. TOP clausule wordt uitgevoerd.

Hoop dat dit je vraag beantwoordt. Het legt ook uit waarom de alias werkt in ORDER BY clausule.



  1. Hoe aggregeren zonder `GROUP BY` te gebruiken?

  2. Hoe dubbele invoegingen in een tabel te voorkomen?

  3. Waarom postgresql geen index gebruikt in deze query

  4. rij selecteren uit mysql als id overeenkomt