Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengira Jumlah Kumulatif dalam MySQL Tanpa Menggunakan Fungsi Analitik?

Bagaimana untuk Mengira Jumlah Kumulatif dalam MySQL Tanpa Menggunakan Fungsi Analitik?

Barbara Streisand
Lepaskan: 2025-01-03 05:33:42
asal
555 orang telah melayarinya

How to Calculate Cumulative Sum in MySQL Without Using Analytic Functions?

Jumlah Terkumpul dalam MySQL tanpa SET

Dalam MySQL, ketiadaan fungsi analitik seperti jumlah kumulatif memberikan cabaran apabila cuba mengira jumlah berjalan . Walau bagaimanapun, terdapat dua pendekatan untuk mencontohi fungsi ini.

Subkueri Berkaitan

Pendekatan ini menggunakan subkueri dalam pertanyaan utama untuk mendapatkan jumlah terkumpul. Walau bagaimanapun, ia boleh menjadi intensif sumber dan kompleks, terutamanya apabila berurusan dengan gabungan yang rumit.

Pembolehubah Pengguna

Sebagai alternatif, pembolehubah pengguna MySQL boleh dimanfaatkan untuk melakukan pemecahan kawalan pemprosesan. Kaedah ini melibatkan pengisihan hasil pertanyaan asal dan membungkusnya dalam pertanyaan luar.

Dalam pertanyaan luar:

  • Pembolehubah pengguna dimulakan untuk memastikan tiada nilai sebelumnya yang mengganggu.
  • Pertanyaan yang dibalut dilaksanakan, dengan penambahan klausa ORDER BY untuk baris berjujukan pemprosesan.
  • Logik berikut digunakan:

    • Jika nilai id dan hari semasa sepadan dengan nilai dari baris sebelumnya, tambahkan jumlah semasa kepada jumlah kecil terkumpul.
    • Jika tidak, tetapkan semula subjumlah terkumpul kepada sifar dan tetapkan ia arus amaun.

Pembolehubah pengguna dikemas kini dengan id semasa dan nilai hari selepas pengiraan.

Contoh Pertanyaan

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, @cumtotal := 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
Salin selepas log masuk

Jika susunan lajur perlu diubah:

SELECT d.id, d.day, d.hr, d.amount, d.cumulative_total
FROM (
       // query from above
     ) d
Salin selepas log masuk

Pendekatan ini ialah sesuai untuk versi MySQL sebelum 8.0 dan boleh menyediakan penyelesaian yang cekap untuk mengira jumlah terkumpul ke atas satu set baris.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Jumlah Kumulatif dalam MySQL Tanpa Menggunakan Fungsi Analitik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan