Kira Peratusan daripada SUM() dalam Pertanyaan PILIHAN Yang Sama
Dalam jadual my_obj, di mana medan integer value_a dan value_b hadir, matlamatnya adalah untuk menentukan peratusan kali nilai_a sama value_b.
Percubaan Salah:
select sum(case when o.value_a = o.value_b then 1 else 0 end) as nb_ok, sum(case when o.value_a != o.value_b then 1 else 0 end) as nb_not_ok, compute_percent(nb_ok,nb_not_ok) from my_obj as o group by o.property_name;
Pendekatan ini gagal kerana lajur nb_ok tidak wujud dalam pertanyaan.
Dioptimumkan Penyelesaian:
SELECT property_name ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct FROM my_obj GROUP BY 1;
Penjelasan:
Keputusan:
property_name | pct --------------+---- prop_1 | 17 prop_2 | 43
Alternatif untuk Digit Pecahan:
SELECT property_name ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct FROM my_obj GROUP BY 1;
Variasi ini memperkenalkan digit pecahan untuk mengekalkan tempat perpuluhan.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Peratusan Nilai Padanan dalam Pertanyaan SQL SELECT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!