Anledningen till att du inte kan använda SUM()
i WHERE
klausul är ordningen för utvärdering av klausuler.
FROM
talar om var du ska läsa rader ifrån. Precis när rader läses från disk till minne, kontrolleras de för WHERE
betingelser. (Faktiskt i många fall rader som misslyckas med WHERE
klausul kommer inte ens att läsas från disk. "Villkor" är formellt kända som predikat och några predikat används - av sökmotorn - för att bestämma vilka rader som ska läsas från bastabellerna. Dessa kallas åtkomst predikat.) Som du kan se är WHERE
klausul tillämpas på varje rad när den presenteras för motorn.
Å andra sidan görs aggregering först efter att alla rader (som verifierar alla predikaten) har lästs.
Tänk på det här:SUM()
gäller ENDAST för de rader som uppfyller WHERE
betingelser. Om du sätter SUM()
i WHERE
klausul, du ber om cirkulär logik. Passar en ny rad WHERE
klausul? Hur skulle jag kunna veta? Om det går igenom måste jag inkludera det i SUM
, men om inte, bör det inte inkluderas i SUM
. Så hur utvärderar jag ens SUM
skick?