Ich möchte das tun können:
%Vor%Aber ich bekomme eine unbekannte Spalte mit "sumTotal".
Ist das möglich?
Verwenden Sie HAVING
:
Das Problem ist, dass die WHERE
-Klausel vor der SELECT
-Anweisung ausgeführt wird. Daher ist die Spalte sumTotal
noch nicht verfügbar.
Die HAVING
-Klausel wird nach der SELECT
-Anweisung ausgeführt . Es Arten von Filtern die Ergebnisse aus, nachdem Sie alles ausgewählt haben. Bedenken Sie jedoch, dass HAVING
langsamer ist. Es funktioniert auf der ganzen Reihe von Reihen.
Aus der MySQL-Dokumentation :
Die Klausel HAVING wird nahezu unmittelbar vor dem Senden von Elementen an den Client ohne Optimierung angewendet. (LIMIT wird nach HAVING angewendet.)
Der SQL-Standard erfordert, dass HAVING nur auf Spalten in der GROUP BY-Klausel oder auf Spalten verweisen darf, die in Aggregatfunktionen verwendet werden. MySQL unterstützt jedoch eine Erweiterung dieses Verhaltens und erlaubt HAVING, auch auf Spalten in der SELECT-Liste und Spalten in äußeren Unterabfragen zu verweisen.
%Vor%Die HAVING-Klausel kann sich auf Aggregatfunktionen beziehen, was die WHERE-Klausel nicht kann:
Verwenden Sie nicht HAVING für Elemente, die in der WHERE-Klausel enthalten sein sollten.
Sie müssen 'Haben' -
verwenden %Vor%Ich bin mir nicht sicher, ob Sie Ihr Alias-Feld verwenden können oder ob Sie schreiben müssen: (accounts.col1 + rechnungen.col2 + rechnungen.col3) & gt; 10000.
Die Anweisung 'where' funktioniert in Verbindung mit 'select': Sie filtert, welche Datensätze zuerst zurückgegeben werden. 'Having' filtert den zurückgesendeten Datensatz, normalerweise, weil die 'Having'-Bedingung zum Zeitpunkt des' select 'nicht bekannt sein konnte.
Um eine einzige Dokumentation zu zitieren: 'Die HAVING-Klausel wurde zu SQL hinzugefügt, weil das WHERE-Schlüsselwort nicht mit Aggregatfunktionen verwendet werden konnte.' Irgendwo anders wird geschrieben ' Die SQL HAVING-Klausel wird in Kombination mit der SQL GROUP BY-Klausel verwendet. Es kann in einer SQL SELECT-Anweisung verwendet werden, um die Datensätze zu filtern, die eine SQL GROUP BY zurückgibt .