sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué no se permiten funciones agregadas en la cláusula where?

La razón por la que no puedes usar SUM() en el WHERE cláusula es el orden de evaluación de las cláusulas.

FROM le dice de dónde leer las filas. Justo cuando las filas se leen del disco a la memoria, se verifican en busca de WHERE condiciones. (En realidad, en muchos casos, las filas que fallan WHERE la cláusula ni siquiera se leerá del disco. Las "condiciones" se conocen formalmente como predicados y el motor de ejecución de consultas utiliza algunos predicados para decidir qué filas se leen de las tablas base. Estos se llaman acceso predicados.) Como puede ver, el WHERE La cláusula se aplica a cada fila a medida que se presenta al motor.

Por otro lado, la agregación se realiza solo después de que se hayan leído todas las filas (que verifican todos los predicados).

Piensa en esto:SUM() se aplica SOLO a las filas que satisfacen WHERE condiciones. Si pones SUM() en el WHERE cláusula, está pidiendo lógica circular. ¿Una nueva fila pasa el WHERE? ¿cláusula? ¿Cómo puedo saber? Si pasa, entonces debo incluirlo en el SUM , pero si no, no debe incluirse en el SUM . Entonces, ¿cómo evalúo el SUM condición?