sql >> Database >  >> RDS >> Oracle

Waarom zijn geaggregeerde functies niet toegestaan ​​in de where-clausule?

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?



  1. Hoe kan ik een HTTP-verzoek indienen vanaf de SQL-server?

  2. De regels van Codd in SQL

  3. FOUT:functies in index-expressie moeten worden gemarkeerd als IMMUTABLE in Postgres

  4. Een kolom toevoegen aan een tabel in SQL