Rumah >pangkalan data >tutorial mysql >Bagaimanakah MySQL boleh mencapai pengagregatan bersyarat dengan berkesan tanpa sokongan langsung untuk 'SUM IF' dan 'COUNT IF'?

Bagaimanakah MySQL boleh mencapai pengagregatan bersyarat dengan berkesan tanpa sokongan langsung untuk 'SUM IF' dan 'COUNT IF'?

Susan Sarandon
Susan Sarandonasal
2024-11-15 00:58:02763semak imbas

How can MySQL effectively achieve conditional aggregations without direct support for 'SUM IF' and 'COUNT IF'?

Penyelesaian Elegan: Mengatasi Had 'SUM IF' dan 'COUNT IF' dalam MySQL

Walaupun kegunaannya, MySQL tidak mempunyai sokongan langsung untuk fungsi 'SUM IF' dan 'COUNT IF'. Had ini selalunya boleh mengecewakan apabila berurusan dengan pengagregatan bersyarat. Walau bagaimanapun, terdapat penyelesaian yang elegan menggunakan pernyataan CASE.

Pertimbangkan senario berikut:

| id | hour | kind |
|---|---|---|
| 1 | 10 | 1 |
| 2 | 15 | 2 |
| 3 | 20 | 1 |
| 4 | 25 | 3 |

Matlamatnya adalah untuk mengira:

  • Jumlah bilangan rekod
  • Jumlah jam
  • Bilangan rekod yang 'jenis' bersamaan dengan 1

Percubaan Asal dan Respons MySQL:

Percubaan awal menggunakan 'SUM( IF(...) )' atau 'COUNT( IF(...) )' mengakibatkan ralat. MySQL tidak membenarkan mencampurkan fungsi agregat dengan struktur kawalan seperti 'JIKA'.

Penyelesaian Menggunakan Pernyataan CASE:

Pernyataan CASE menyediakan ungkapan bersyarat untuk menilai dan mengembalikan secara dinamik nilai. Ia boleh digunakan untuk mencapai pengagregatan bersyarat yang diingini dengan berkesan. Begini caranya:

SELECT count(id), 
    SUM(hour) as totHour, 
    SUM(case when kind = 1 then 1 else 0 end) as countKindOne

Pertanyaan ini melaksanakan operasi berikut:

  • count(id): Mengira jumlah bilangan rekod.
  • SUM(jam) : Mengira jumlah jam.
  • SUM(kes apabila jenis = 1 maka 1 lain 0 tamat): Menggunakan pernyataan CASE untuk mengira bilangan rekod dengan syarat 'jenis' bersamaan dengan 1.

Output:

| count(id) | totHour | countKindOne |
|---|---|---|
| 4 | 70 | 2 |

Dengan menggunakan pernyataan CASE, kami boleh mengatasi batasan 'SUM IF' dan 'COUNT IF' dalam MySQL secara elegan, membolehkan pengagregatan bersyarat yang cekap.

Atas ialah kandungan terperinci Bagaimanakah MySQL boleh mencapai pengagregatan bersyarat dengan berkesan tanpa sokongan langsung untuk 'SUM IF' dan 'COUNT IF'?. 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