Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Agregasi Jumlah Berbilang dengan Cekap dengan Penapisan Bersyarat dalam MySQL?

Bagaimana untuk Mendapatkan Agregasi Jumlah Berbilang dengan Cekap dengan Penapisan Bersyarat dalam MySQL?

Susan Sarandon
Lepaskan: 2025-01-21 12:45:10
asal
781 orang telah melayarinya

How to Efficiently Retrieve Multiple Sum Aggregations with Conditional Filtering in MySQL?

MySQL: Mendapatkan Agregat Berbilang Jumlah dengan Cekap dengan Penapisan Bersyarat

Bekerja dengan pangkalan data selalunya memerlukan mendapatkan semula beberapa set data berdasarkan keadaan yang berbeza-beza. Ini boleh menjadi sangat rumit apabila berurusan dengan nilai medan yang berbeza dalam satu pertanyaan.

Cabaran:

Pertimbangkan jadual transactions dengan lajur id, account_id, budget_id, points dan type. Matlamatnya ialah untuk mendapatkan semula, dalam satu pertanyaan, jumlah points untuk setiap budget_id dengan type sama dengan 'peruntukan' dan secara berasingan, jumlah points dengan type sama dengan 'isu'.

Penyelesaian: Memanfaatkan Fungsi IF() MySQL

Fungsi

MySQL IF() menyediakan penyelesaian yang ringkas. Kita boleh menggunakannya dalam SUM() agregat, digabungkan dengan GROUP BY, untuk mencapai hasil yang diinginkan:

<code class="language-sql">SELECT 
    budget_id, 
    SUM(IF(type = 'allocation', points, 0)) AS allocated,
    SUM(IF(type = 'issue', points, 0)) AS issued
FROM 
    transactions
GROUP BY 
    budget_id;</code>
Salin selepas log masuk

Pecahan Pertanyaan:

  • IF(type = 'allocation', points, 0): Ungkapan bersyarat ini menyemak setiap baris. Jika type ialah 'peruntukan', ia mengembalikan nilai points; jika tidak, ia mengembalikan 0.
  • IF(type = 'issue', points, 0): Ini mencerminkan perkara di atas, tetapi untuk type = 'isu'.
  • SUM(...): Fungsi SUM() mengira jumlah bagi setiap ungkapan bersyarat, dengan berkesan menjumlahkan mata secara berasingan untuk jenis 'peruntukan' dan 'isu'.
  • GROUP BY budget_id: Ini mengumpulkan hasil mengikut budget_id, memberikan jumlah agregat untuk setiap belanjawan.

Contoh Ilustrasi:

Pertanyaan, apabila dilaksanakan terhadap jadual transactions, mungkin menghasilkan set hasil seperti ini:

<code>budget_id | allocated | issued
----------|-----------|--------
     434  |   200000  |   100
     242  |   100000  |  5020
     621  |    45000  |  3940</code>
Salin selepas log masuk

Ini menunjukkan kecekapan mendapatkan semula berbilang set data terkumpul dengan penapisan bersyarat yang berbeza dalam satu pertanyaan MySQL yang dioptimumkan.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Agregasi Jumlah Berbilang dengan Cekap dengan Penapisan Bersyarat dalam MySQL?. 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