Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego funkcje agregujące nie są dozwolone w klauzuli where?

Powód, dla którego nie możesz użyć SUM() w WHERE klauzula to kolejność oceny klauzul.

FROM mówi, skąd czytać wiersze. Gdy wiersze są odczytywane z dysku do pamięci, są sprawdzane pod kątem WHERE warunki. (Właściwie w wielu przypadkach wiersze, które nie zawierają WHERE klauzula nie zostanie nawet odczytana z dysku. „Warunki” są formalnie znane jako predykaty a niektóre predykaty są używane - przez aparat wykonywania zapytań - do decydowania, które wiersze są odczytywane z tabel podstawowych. Są to tak zwane dostęp predykaty). Jak widać, WHERE klauzula jest stosowana do każdego wiersza, gdy jest prezentowana w wyszukiwarce.

Z drugiej strony agregacja jest wykonywana dopiero po odczytaniu wszystkich wierszy (które weryfikują wszystkie predykaty).

Pomyśl o tym:SUM() dotyczy TYLKO wierszy, które spełniają warunek WHERE warunki. Jeśli umieścisz SUM() w WHERE klauzula, prosisz o logikę cykliczną. Czy nowy wiersz przechodzi WHERE? klauzula? Skąd mam wiedzieć? Jeśli przejdzie, to muszę uwzględnić go w SUM , ale jeśli nie, nie powinno być uwzględnione w SUM . Jak więc w ogóle ocenić SUM? stan?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - Jak wygenerować skrypt od programisty sql

  2. Oracle PL/SQL:przykład dynamicznego SQL przy użyciu wykonania natychmiastowego

  3. jak sprawdzić wszystkie ograniczenia na stole w oracle

  4. Jak znaleźć uprawnienia i role nadawane użytkownikowi w Oracle?

  5. Zmodyfikuj zapytanie widoku zmaterializowanego