Ich muss einen Alias in der WHERE-Klausel verwenden, aber es sagt mir immer wieder, dass es sich um eine unbekannte Spalte handelt. Gibt es eine Möglichkeit, dieses Problem zu umgehen? Ich muss Datensätze auswählen, deren Bewertung höher als x ist. Die Bewertung wird als folgender Alias berechnet:
sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating
quelle
HAVING
ausgeführt wird, nachdem die Daten abgerufen wurden undWHERE
zuvor ausgeführt wurden.Keine Ahnung, ob dies in MySQL funktioniert, aber mit SQL Server können Sie es auch wie folgt umbrechen:
quelle
Diese Frage ist ziemlich alt und eine Antwort hat bereits 160 Stimmen erhalten ...
Dennoch würde ich dies klarstellen: Die Frage ist eigentlich nicht, ob Aliasnamen in der
WHERE
Klausel verwendet werden können.ist eine Aggregation. In der
WHERE
Klausel beschränken wir die gewünschten Datensätze aus den Tabellen, indem wir ihre Werte betrachten.sum(reviews.rev_rating)
undcount(reviews.rev_id)
sind jedoch keine Werte, die wir in einem Datensatz finden; Dies sind Werte, die wir erst nach der Aggregation der Datensätze erhalten.Ist
WHERE
also unangemessen. Wir brauchenHAVING
, da wir Ergebniszeilen nach der Aggregation einschränken wollen. Es kann nicht seinNoch
daher.
Zum anderen ist dies möglich und entspricht dem SQL-Standard. Wohingegen
ist nur in MySQL möglich. Es ist kein gültiges SQL gemäß dem Standard, da die
SELECT
Klausel danach ausgeführt werden sollHAVING
. Aus den MySQL-Dokumenten:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
quelle
Wenn Ihre Abfrage statisch ist, können Sie sie als Ansicht definieren und diesen Alias in der where-Klausel verwenden, während Sie die Ansicht abfragen.
quelle
quelle