Mengira Peratusan daripada SUM() dalam Satu Pertanyaan SQL
Dalam PostgreSQL, anda mungkin menghadapi ralat semasa cuba mengira peratusan menggunakan SUM () dalam pertanyaan SQL yang sama. Masalah timbul apabila anda cuba mengakses lajur yang belum wujud, seperti nb_ok dalam contoh anda.
Penyelesaian Dioptimumkan
Pendekatan yang lebih cekap dan tepat untuk mengira peratusan ialah menggunakan pertanyaan berikut:
SELECT property_name, (count(value_a = value_b OR NULL) * 100) / count(*) AS pct FROM my_obj GROUP BY 1;
Pertanyaan ini mengambil yang berikut langkah:
Mengendalikan Nilai NULL
Penggunaan OR NULL dalam ungkapan count() memastikan nilai NULL tidak dikira . Ini penting jika jadual anda mengandungi nilai NULL, kerana ia menghalang keputusan yang salah atau ralat pembahagian demi sifar.
Memaksa Digit Pecahan
Untuk mengekalkan digit pecahan dalam hasilnya, anda boleh menggunakan 100.0 dan bukannya 100, menghasilkan pengiraan berangka yang mengelakkan pemotongan:
SELECT property_name, round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct FROM my_obj GROUP BY 1;
Mengelakkan Pengecam Tidak Peka Huruf
Apabila menggunakan PostgreSQL, adalah disyorkan untuk mengelakkan pengecam kes bercampur yang tidak disebut, seperti valueA. Sebaliknya, gunakan pengecam huruf kecil untuk mengelakkan kemungkinan ralat dan kekeliruan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Peratusan Dengan Cekap Menggunakan SUM() dalam Pertanyaan PostgreSQL Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!