Mengira Jumlah dengan Penapisan Bersyarat dalam SQL
Apabila berurusan dengan pernyataan SQL yang besar, selalunya perlu untuk mengira nilai ringkasan. Walau bagaimanapun, kadangkala diperlukan untuk hanya mempertimbangkan subset data berdasarkan keadaan tertentu. Artikel ini meneroka cara mengubah suai penyata sedia ada untuk mengira jumlah nilai tunai untuk ID transaksi unik, tetapi hanya untuk mereka yang mempunyai tarikh nilai dalam bulan lepas.
Masalah:
Untuk mengira jumlah tunai bagi setiap ID transaksi dalam penyata SQL yang kompleks, kod berikut digunakan:
select sum(cash) from Table a where a.branch = p.branch and a.transID = p.transID) TotalCash
Walau bagaimanapun, bertujuan untuk mengubah suai penyata ini kepada hanya menjumlahkan nilai tunai yang mempunyai tarikh nilai dalam bulan lepas.
Penyelesaian:
Kod yang disemak hendaklah menggantikan ungkapan CASE asal dengan berikut:
SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)
Penjelasan:
The Ungkapan CASE dalam kod asal anda menggunakan sintaks yang salah. Sintaks SEARCH CASE diperlukan dalam kes ini kerana ungkapan Boolean sedang dinilai untuk menentukan keputusan:
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
Dalam kod yang disemak, ungkapan CASE menyemak sama ada ValueDate lebih besar daripada @startMonthDate. Jika ya, jumlah tunai dimasukkan dalam pengiraan; jika tidak, ia digantikan dengan 0. Ini memastikan bahawa hanya nilai tunai dalam bulan lepas dipertimbangkan.
Pertimbangan Prestasi:
Jika prestasi menjadi isu, ia adalah disyorkan untuk mempertimbangkan menggunakan JOIN dan GROUP BY dan bukannya subquery bergantung. Ini boleh meningkatkan kelajuan pelaksanaan pernyataan.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Jumlah Nilai Tunai dalam Bulan Terakhir dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!