Tach!
Ergo wird zu erst die where Bedingung abgearbeitet. Having kommt anscheinend nach where. Richtig?
Pi mal Daumen ist die Reihenfolge wie folgt, wobei der Optimizer anders vorgehen kann, aber das macht er dann transparent:
FROM mit JOINs selektiert die zu berücksichtigenden Tabellen.
WHERE schränkt die Menge ein. Aliasnamen von Tabellen sind bekannt und können verwendet werden.
GROUP BY fasst zusammen.
SELECT sammelt/berechnet die Felder für die Ergebnismenge. Jetzt sind auch die dortigen Aliasnamen bekannt.
HAVING sortiert noch ein paar Datensätze aus, üblicherweise bezogen auf Kriterien, die erst jetzt zur Verfügung stehen.
ORDER BY sortiert den ganzen Käse, wobei Aliasnamen und auch Spaltennummern angegeben werden können.
und LIMIT lässt den augenblicklich nicht gewollten Rest untern Tisch fallen.
dedlfix.