Dalam PostgreSQL, pertanyaan berikut mengembalikan ralat:
SELECT COUNT(a.log_id) AS overall_count FROM "Log" as a, "License" as b WHERE a.license_id=7 AND a.license_id=b.license_id AND b.limit_call > overall_count GROUP BY a.license_id;
ERROR: column "overall_count" does not exist
Sebab ralat ini ialah bahawa klausa WHERE merujuk lajur output, "overall_count", yang belum ditakrifkan dalam struktur jadual. Untuk membetulkannya, kita mesti mengalihkan syarat kiraan ke klausa HAVING kerana ia merujuk kepada hasil fungsi agregat selepas WHERE telah digunakan.
Selain itu, pertanyaan juga harus menggunakan LEFT JOIN dan bukannya JOIN biasa untuk elakkan mengecualikan lesen tanpa sebarang log dan gunakan count(b.license_id) atau count(*) untuk kecekapan dan kejelasan.
Yang betul pertanyaan sepatutnya kelihatan seperti ini:
SELECT a.license_id, a.limit_call , count(b.license_id) AS overall_count FROM "License" a LEFT JOIN "Log" b USING (license_id) WHERE a.license_id = 7 GROUP BY a.license_id HAVING a.limit_call > count(b.license_id)
Atas ialah kandungan terperinci Bagaimana untuk Mengira Baris dengan betul dalam PostgreSQL Menggunakan WHERE dan Fungsi Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!