Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Agregasi Jumlah Berbilang dengan Cekap dengan Penapisan Bersyarat dalam 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
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>
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>
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!