De reden waarom u SUM()
niet kunt gebruiken in de WHERE
clausule is de volgorde van evaluatie van clausules.
FROM
vertelt u waar u rijen vandaan moet lezen. Net zoals rijen van schijf naar geheugen worden gelezen, worden ze gecontroleerd op de WHERE
voorwaarden. (Eigenlijk in veel gevallen rijen die niet voldoen aan de WHERE
clausule zal niet eens van schijf worden gelezen. "Voorwaarden" zijn formeel bekend als predikaten en sommige predikaten worden gebruikt - door de query-uitvoeringsengine - om te beslissen welke rijen uit de basistabellen worden gelezen. Deze worden toegang genoemd predikaten.) Zoals je kunt zien, is de WHERE
clausule wordt toegepast op elke rij zoals deze aan de engine wordt gepresenteerd.
Aan de andere kant wordt aggregatie pas uitgevoerd nadat alle rijen (die alle predikaten verifiëren) zijn gelezen.
Denk hier eens over na:SUM()
is ALLEEN van toepassing op de rijen die voldoen aan de WHERE
voorwaarden. Als u SUM()
in de WHERE
clausule, je vraagt om circulaire logica. Komt een nieuwe rij door de WHERE
clausule? Hoe zou ik dat weten? Als het zal slagen, moet ik het opnemen in de SUM
, maar als dat niet het geval is, moet het niet worden opgenomen in de SUM
. Dus hoe evalueer ik zelfs de SUM
staat?