See the document referenced by CodeByMoonlight in an answer to your recent question.
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 from clause is formed.
- The where clause is then evaluated to eliminate rows that do not satisfy
the search_condition.- Next, the rows are grouped using the columns in the group by clause.
- Then, Groups that do not satisfy the search_condition in the having
clause are eliminated.- Next, the expressions in the select clause target list are
evaluated.- If the distinct keyword in present in the select clause, duplicate rows
are now eliminated.- The union is taken after each sub-select is evaluated.
- Finally, the resulting rows are sorted according to the columns
specified in the order by clause.