Menyiasat dengan SUM() dalam MySQL WHERE Klausa
Apabila bekerja dengan jadual MySQL, mungkin perlu untuk mendapatkan semula baris berdasarkan pengiraan agregat , seperti jumlah nilai sebelumnya. Walau bagaimanapun, menggunakan SUM() terus dalam klausa WHERE mungkin tidak menghasilkan hasil yang dijangkakan.
Andaikan anda mempunyai jadual dengan lajur "id" dan "tunai":
id | cash 1 200 2 301 3 101 4 700
Untuk mendapatkan semula baris pertama di mana jumlah semua tunai sebelumnya melebihi nilai tertentu (cth., 500), menggunakan WHERE SUM(tunai) > 500 tidak akan berfungsi seperti yang diharapkan.
Penyelesaian Menggunakan Klausa HAVING
MySQL membenarkan perbandingan agregat dalam klausa HAVING dan bukannya klausa WHERE. Untuk mencapai hasil yang diingini, anda boleh menggunakan pertanyaan berikut:
GROUP BY ... HAVING SUM(cash) > 500
Walau bagaimanapun, ini memerlukan penentuan klausa GROUP BY, yang mungkin tidak diperlukan.
Menggunakan Nested Subquery dengan Running Total
Pendekatan alternatif ialah menggunakan subquery bersarang untuk mengira jumlah berjalan dan kemudian membandingkannya dengan nilai yang ditentukan dalam klausa WHERE:
SELECT y.id, y.cash FROM (SELECT t.id, t.cash, (SELECT SUM(x.cash) FROM table x WHERE x.id <= t.id) AS running_total FROM table t ORDER BY t.id) y WHERE y.running_total > 500 ORDER BY y.id LIMIT 1
In pertanyaan ini, subkueri digunakan untuk mengira jumlah berjalan bagi setiap baris dalam jadual. Alias running_total digunakan untuk merujuk nilai ini dalam klausa WHERE. Klausa LIMIT ditambah untuk mengembalikan hanya baris pertama yang sepadan dengan syarat.
Pendekatan ini membenarkan perbandingan langsung nilai agregat dalam klausa WHERE dan menghasilkan hasil yang diingini tanpa memerlukan klausa GROUP BY.
Atas ialah kandungan terperinci Bagaimana untuk Membuat Pertanyaan untuk Baris Di Mana Jumlah Nilai Sebelumnya Melebihi Ambang dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!