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:
Percubaan Asal dan Respons MySQL:
Percubaan awal menggunakan 'SUM( JIKA(...) )' 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:
Output:
| count(id) | totHour | countKindOne | |---|---|---| | 4 | 70 | 2 |
Dengan menggunakan pernyataan CASE, kita boleh mengatasi batasan 'SUM IF' dan 'COUNT IF' dalam MySQL dengan elegan, membolehkan bersyarat yang cekap pengagregatan.
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!