sql >> Database teknologi >  >> RDS >> Oracle

Hvorfor er aggregerede funktioner ikke tilladt i where-klausulen

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?



  1. Sådan fungerer ROUND() i MariaDB

  2. Kaldes onUpgrade-metoden nogensinde?

  3. Er mine MySQL-serverforbindelser krypteret og sikre?

  4. phpMyAdmin på MySQL 8.0