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?