Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Por que as funções agregadas não são permitidas na cláusula where


O motivo pelo qual você não pode usar SUM() no WHERE cláusula é a ordem de avaliação das cláusulas.

FROM informa de onde ler as linhas. Assim que as linhas são lidas do disco para a memória, elas são verificadas quanto ao WHERE condições. (Na verdade, em muitos casos, as linhas que falham no WHERE cláusula nem mesmo será lida do disco. "Condições" são formalmente conhecidas como predicados e alguns predicados são usados ​​- pelo mecanismo de execução de consultas - para decidir quais linhas são lidas nas tabelas base. Estes são chamados de acesso predicados.) Como você pode ver, o WHERE A cláusula é aplicada a cada linha conforme é apresentada ao mecanismo.

Por outro lado, a agregação é feita somente após a leitura de todas as linhas (que verificam todos os predicados).

Pense nisso:SUM() aplica-se SOMENTE às linhas que atendem ao WHERE condições. Se você colocar SUM() no WHERE cláusula, você está pedindo lógica circular. Uma nova linha passa o WHERE cláusula? Como eu iria saber? Se for aprovado, devo incluí-lo no SUM , mas se não, não deve ser incluído no SUM . Então, como eu avalio o SUM doença?