Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Peratusan Nilai Padanan dalam Pertanyaan SQL SELECT?

Bagaimana untuk Mengira Peratusan Nilai Padanan dalam Pertanyaan SQL SELECT?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 03:49:09816semak imbas

How to Calculate the Percentage of Matching Values in a SQL SELECT Query?

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:

  • Keutamaan pengendali bagi = melebihi ATAU memastikan perbandingan dinilai terlebih dahulu.
  • count(value_a = value_b OR NULL) memastikan bahawa nilai NULL adalah diabaikan.
  • Bahagian (count(value_a = value_b OR NULL) * 100) mengikut kiraan(*) mengira peratusan.
  • count(*) mewakili jumlah bilangan baris, termasuk NULL nilai.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn