Mengambil Dua Set Data Berasingan Dengan Cekap Menggunakan Pertanyaan SQL Tunggal
Contoh ini menunjukkan cara untuk mendapatkan semula dua set data yang berbeza daripada satu pertanyaan SQL, mengelakkan keperluan untuk berbilang pertanyaan. Kami akan menggunakan jadual transactions
(mengandungi lajur id
, account_id
, budget_id
, points
dan type
) untuk menggambarkan. Matlamatnya adalah untuk mendapatkan:
points
bagi setiap budget_id
dengan type
ialah 'peruntukan'.points
bagi setiap budget_id
dengan type
adalah 'isu'.Penyelesaian: Pengagregatan Bersyarat
Satu pertanyaan SQL boleh mencapai ini menggunakan pengagregatan bersyarat:
<code class="language-sql">SELECT budget_id, SUM(CASE WHEN type = 'allocation' THEN points ELSE 0 END) AS allocated_points, SUM(CASE WHEN type = 'issue' THEN points ELSE 0 END) AS issued_points FROM transactions GROUP BY budget_id;</code>
Pertanyaan ini menggunakan pernyataan CASE
(atau IF
dalam sesetengah sistem pangkalan data) untuk menjumlahkan points
secara bersyarat. Jika type
ialah 'peruntukan', points
ditambahkan pada allocated_points
; jika tidak, 0 ditambah. Logik yang sama digunakan untuk issued_points
. Klausa GROUP BY
memastikan jumlah dikira untuk setiap budget_id
unik.
Keluaran Jangkaan:
Pertanyaan akan mengembalikan set hasil yang serupa dengan ini:
<code>budget_id | allocated_points | issued_points ----------|-------------------|--------------- 434 | 200000 | 100 242 | 100000 | 5020 621 | 45000 | 3940</code>
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Dua Set Data Berbeza dengan Pengagregatan Bersyarat dalam Satu Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!