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

Susan Sarandon
Lepaskan: 2024-11-15 00:58:02
asal
667 orang telah melayarinya

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

Matlamatnya adalah untuk mengira:

  • Jumlah bilangan rekod
  • Jumlah jam
  • Bilangan rekod di mana 'jenis' adalah sama dengan 1

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

Pertanyaan ini melaksanakan operasi berikut:

  • count(id): Mengira jumlah bilangan rekod.
  • SUM(jam) : Mengira jumlah jam.
  • SUM(kes apabila jenis = 1 kemudian 1 lagi 0 tamat): Menggunakan Penyata KES untuk mengira bilangan rekod dengan syarat 'jenis' bersamaan dengan 1.

Output:

| count(id) | totHour | countKindOne |
|---|---|---|
| 4 | 70 | 2 |
Salin selepas log masuk

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!

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