cari

Rumah  >  Soal Jawab  >  teks badan

Buat lajur untuk jumlah kumulatif dalam MySQL

<p>Saya mempunyai jadual yang kelihatan seperti ini:</p> <pre class="brush:php;toolbar:false;">kiraan id 1 100 2 50 3 10</pra> <p>Saya mahu menambah lajur baharu yang dipanggil kumulatif_sum, jadi jadual kelihatan seperti ini: </p> <pre class="brush:php;toolbar:false;">id count cumulative_sum 1 100 100 2 50 150 3 10 160</pra> <p>Adakah terdapat pernyataan kemas kini MySQL yang boleh mencapai ini dengan mudah? Apakah pendekatan terbaik? </p>
P粉670838735P粉670838735449 hari yang lalu493

membalas semua(2)saya akan balas

  • P粉245276769

    P粉2452767692023-08-23 09:47:13

    Gunakan pertanyaan berkaitan:


    SELECT t.id,
             t.count,
             (SELECT SUM(x.count)
                FROM TABLE x
               WHERE x.id <= t.id) AS cumulative_sum
        FROM TABLE t
    ORDER BY t.id

    Gunakan pembolehubah MySQL:


    SELECT t.id,
             t.count,
             @running_total := @running_total + t.count AS cumulative_sum
        FROM TABLE t
        JOIN (SELECT @running_total := 0) r
    ORDER BY t.id

    Nota:

    • JOIN (SELECT @running_total := 0) r是一个交叉连接,允许在不需要单独的SETIsytiharkan pembolehubah dalam konteks arahan.
    • MySQL memerlukan alias jadual untuk sebarang subkueri/jadual terbitan/paparan sebarisr

    Nota:

    • Hanya berfungsi dengan MySQL, tidak mudah alih ke pangkalan data lain
    • ORDER BYSangat penting, ia memastikan pesanan sepadan dengan soalan asal, dan mungkin mempunyai kesan yang lebih besar untuk penggunaan pembolehubah yang lebih kompleks (cth: fungsi ROW_NUMBER/RANK semu, tidak disokong oleh MySQL)

    balas
    0
  • P粉006540600

    P粉0065406002023-08-23 00:13:27

    Jika prestasi adalah isu, anda boleh menggunakan pembolehubah MySQL:

    set @csum := 0;
    update YourTable
    set cumulative_sum = (@csum := @csum + count)
    order by id;

    Sebagai alternatif, anda boleh mengalih keluar lajur cumulative_sum dan mengiranya dalam setiap pertanyaan:

    set @csum := 0;
    select id, count, (@csum := @csum + count) as cumulative_sum
    from YourTable
    order by id;

    Ini mengira jumlah kumulatif secara berterusan :)

    balas
    0
  • Batalbalas