Grunden til at du ikke kan bruge SUM()
i WHERE
klausul er rækkefølgen for evaluering af klausuler.
FROM
fortæller dig, hvor du skal læse rækker fra. Lige som rækker læses fra disk til hukommelse, kontrolleres de for WHERE
betingelser. (Faktisk i mange tilfælde rækker, der fejler WHERE
klausulen vil ikke engang blive læst fra disken. "Betingelser" er formelt kendt som prædikater og nogle prædikater bruges - af forespørgselsudførelsesmotoren - til at bestemme, hvilke rækker der læses fra basistabellerne. Disse kaldes adgang prædikater.) Som du kan se, er WHERE
klausul anvendes på hver række, som den præsenteres for motoren.
På den anden side foretages aggregering først, efter at alle rækker (der bekræfter alle prædikaterne) er blevet læst.
Tænk over dette:SUM()
gælder KUN for de rækker, der opfylder WHERE
betingelser. Hvis du sætter SUM()
i WHERE
klausul, du beder om cirkulær logik. Sender en ny række WHERE
klausul? Hvordan skulle jeg vide det? Hvis det går igennem, skal jeg inkludere det i SUM
, men hvis ikke, bør det ikke inkluderes i SUM
. Så hvordan evaluerer jeg overhovedet SUM
tilstand?