The HAVING clause is evaluated before the SELECT – so the server doesn’t yet know about that alias.
-
First, the product of all tables in the
FROMclause is formed. -
The
WHEREclause is then evaluated to eliminate rows that do not satisfy the search_condition. -
Next, the rows are grouped using the columns in the
GROUP BYclause. -
Then, groups that do not satisfy the
search_conditionin theHAVINGclause are eliminated. -
Next, the expressions in the
SELECTstatement target list are evaluated. -
If the
DISTINCTkeyword in present in the select clause, duplicate rows are now eliminated. -
The
UNIONis taken after each sub-select is evaluated. -
Finally, the resulting rows are sorted according to the columns specified in the
ORDER BYclause. -
TOPclause is executed.
Hope this answers your question. Also, it explains why the alias works in ORDER BY clause.