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?