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?