Oracle
 sql >> база данни >  >> RDS >> Oracle

Защо агрегатните функции не са разрешени в клаузата where

Причината, поради която не можете да използвате SUM() в WHERE клауза е реда на оценка на клаузите.

FROM ви казва откъде да четете редове. Точно когато редовете се четат от диск в памет, те се проверяват за WHERE условия. (Всъщност в много случаи редове, които не отговарят на WHERE клаузата дори няма да бъде прочетена от диск. „Условията“ са официално известни като предикати и някои предикати се използват - от машината за изпълнение на заявка - за да се реши кои редове се четат от базовите таблици. Те се наричат ​​достъп предикати.) Както можете да видите, WHERE Клаузата се прилага към всеки ред, както е представена на двигателя.

От друга страна, агрегирането се извършва само след като всички редове (които проверяват всички предикати) са прочетени.

Помислете за това:SUM() се прилага САМО за редовете, които отговарят на WHERE условия. Ако поставите SUM() в WHERE клауза, вие искате кръгова логика. Нов ред предава ли WHERE клауза? Как може да знам? Ако ще мине, тогава трябва да го включа в SUM , но ако не, не трябва да се включва в SUM . И така, как да оценя SUM състояние?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. проблем при намирането на списък с файлове в директорията

  2. Инсталирайте Oracle Instant клиента в Docker контейнера за Python cx_Oracle

  3. ORA-03113:край на файла на комуникационния канал

  4. Какво е еквивалентът на SQL Server APPLY в Oracle?

  5. Как да генерирам целия DDL на схема на Oracle (скриптируема)?