Der Grund, warum Sie SUM()
nicht verwenden können im WHERE
Klausel ist die Reihenfolge der Auswertung von Klauseln.
FROM
sagt Ihnen, wo Sie Zeilen lesen müssen. Sobald Zeilen von der Festplatte in den Speicher gelesen werden, werden sie auf das WHERE
überprüft Bedingungen. (Eigentlich in vielen Fällen Zeilen, die den WHERE
nicht erfüllen Klausel wird nicht einmal von der Festplatte gelesen. "Bedingungen" sind formal als Prädikate bekannt und einige Prädikate werden von der Abfrageausführungsmaschine verwendet, um zu entscheiden, welche Zeilen aus den Basistabellen gelesen werden. Diese werden Zugriff genannt Prädikate.) Wie Sie sehen können, ist WHERE
-Klausel wird auf jede Zeile angewendet, wenn sie der Engine präsentiert wird.
Andererseits erfolgt die Aggregation erst, nachdem alle Zeilen (die alle Prädikate verifizieren) gelesen wurden.
Denken Sie darüber nach:SUM()
gilt NUR für die Zeilen, die WHERE
erfüllen Bedingungen. Wenn Sie SUM()
eingeben im WHERE
Klausel, fragen Sie nach zirkulärer Logik. Übergibt eine neue Zeile das WHERE
Klausel? Woher soll ich das wissen? Wenn es besteht, muss ich es in die SUM
aufnehmen , aber wenn nicht, sollte es nicht in SUM
aufgenommen werden . Wie werte ich also überhaupt die SUM
aus Bedingung?