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
Lepaskan: 2024-12-27 03:49:09
asal
787 orang telah melayarinya

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan