Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengapa fungsi agregat tidak diizinkan di klausa where

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?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya menyalin :OLD dan :NEW pseudo-record di/ke prosedur tersimpan Oracle?

  2. ruang kosong terkemuka yang tidak diinginkan pada format nomor Oracle

  3. Bandingkan String yang mengabaikan aksen dalam SQL (ORACLE)

  4. Cara lebih cepat untuk Menyisipkan, melalui skrip, di Oracle?

  5. Alternatif agnostik versi Oracle ODP.NET