Mengira Jumlah Terkumpul atas Set Baris dalam MySQL
Anda berhadapan dengan tugas untuk mendapatkan agregat berjalan untuk lajur tertentu merentas set baris dalam MySQL. Cabarannya terletak pada kekurangan fungsi analitik terbina dalam dalam MySQL sebelum versi 8.0.
Pendekatan Menggunakan Pembolehubah Pengguna
Dalam situasi ini, anda boleh menggunakan pembolehubah pengguna untuk meniru kefungsian fungsi analitik. Ini melibatkan membungkus pertanyaan asal anda dalam pertanyaan lain dan menggunakan ORDER BY untuk memproses baris secara berurutan.
Pertanyaan luar menyemak sama ada nilai baris semasa untuk id dan hari sepadan dengan nilai baris sebelumnya. Jika ya, jumlah terkumpul dikemas kini dengan menambah jumlah daripada baris semasa. Jika tidak, jumlah kumulatif ditetapkan semula dan ditetapkan kepada jumlah baris semasa.
Contoh Pertanyaan
Berikut ialah contoh pertanyaan yang menunjukkan pendekatan ini:
SELECT IF(@prev_id = c.id AND @prev_day = c.day, @cumtotal := @cumtotal + c.amount, @cumtotal := c.amount) AS cumulative_total , @prev_id := c.id AS `id` , @prev_day := c.day AS `day` , c.hr , c.amount AS `amount' FROM ( SELECT @prev_id := NULL , @prev_day := NULL , @subtotal := 0 ) i JOIN ( select id, day, hr, amount from ( //multiple joins on multiple tables)a left join (//unions on multiple tables)b on a.id=b.id ORDER BY 1,2,3 ) c
Dengan membungkus keseluruhan pertanyaan ini dalam kurungan dan menggunakannya sebagai paparan sebaris, anda boleh menyusun semula lajur seperti yang dikehendaki:
SELECT d.id , d.day , d.hr , d.amount , d.cumulative_total FROM ( // query from above ) d
Penghadan
Perlu diingat bahawa pendekatan ini boleh menjadi intensif secara pengiraan untuk set data yang besar. Selain itu, jika predikat dalam pertanyaan asal adalah kompleks, ia boleh meningkatkan lagi kerumitan penyelesaian.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Jumlah Berjalan dalam Versi MySQL Sebelum 8.0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!