Alasan Anda tidak dapat menggunakan SUM()
di WHERE
klausa adalah urutan evaluasi klausa.
FROM
memberitahu Anda dari mana membaca baris. Tepat saat baris dibaca dari disk ke memori, baris tersebut diperiksa untuk WHERE
kondisi. (Sebenarnya dalam banyak kasus baris yang gagal WHERE
klausa bahkan tidak akan dibaca dari disk. "Kondisi" secara resmi dikenal sebagai predikat dan beberapa predikat digunakan - oleh mesin eksekusi kueri - untuk memutuskan baris mana yang dibaca dari tabel dasar. Ini disebut akses predikat.) Seperti yang Anda lihat, WHERE
klausa diterapkan untuk setiap baris seperti yang disajikan ke mesin.
Di sisi lain, agregasi dilakukan hanya setelah semua baris (yang memverifikasi semua predikat) telah dibaca.
Pikirkan tentang ini:SUM()
HANYA berlaku untuk baris yang memenuhi WHERE
kondisi. Jika Anda memasukkan SUM()
di WHERE
klausa, Anda meminta logika melingkar. Apakah baris baru melewati WHERE
ayat? Bagaimana saya tahu? Jika lulus, maka saya harus memasukkannya ke dalam SUM
, tetapi jika tidak, tidak boleh dimasukkan dalam SUM
. Jadi bagaimana saya mengevaluasi SUM
kondisi?