Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Perbezaan Nilai Antara Baris Berturut-turut dalam Jadual Pangkalan Data Menggunakan SQL?

Bagaimana untuk Mengira Perbezaan Nilai Antara Baris Berturut-turut dalam Jadual Pangkalan Data Menggunakan SQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-10 15:22:43883semak imbas

How to Calculate the Value Difference Between Consecutive Rows in a Database Table Using SQL?

Mengira Perbezaan Antara Baris Berturut-turut dalam Jadual Pangkalan Data Menggunakan SQL

Katakan anda mempunyai jadual pangkalan data dengan integer bukan urutan sebagai pengecam baris (rowInt) dan nilai berangka (Value). Cabarannya ialah untuk mengira perbezaan antara Value baris berturut-turut dengan cekap menggunakan SQL.

Pertanyaan mudah seperti ini akan mendapatkan semula data:

<code class="language-sql">SELECT * FROM myTable ORDER BY rowInt;</code>

Namun, kita perlu mengira dan memaparkan perbezaannya. Format output yang dikehendaki ialah:

<code>rowInt   Value   Diff
2        23      22    --45-23
3        45     -35    --10-45
9        10     -45    --0-45
17       0       0     --0 (or NULL, depending on desired behavior)</code>

Berikut ialah cara untuk mencapai ini menggunakan sambung diri dengan subkueri:

<code class="language-sql">SELECT
    c.rowInt,
    c.Value,
    ISNULL(n.Value, 0) - c.Value AS Diff
FROM
    myTable AS c
LEFT JOIN
    myTable AS n ON n.rowInt = (SELECT MIN(rowInt) FROM myTable WHERE rowInt > c.rowInt)
ORDER BY c.rowInt;</code>

Pertanyaan ini melaksanakan LEFT JOIN jadual (myTable) pada dirinya sendiri, alias sebagai c (semasa) dan n (seterusnya). Subkueri dalam klausa ON mendapati minimum rowInt lebih besar daripada baris semasa rowInt, dengan berkesan mengenal pasti baris seterusnya. ISNULL(n.Value, 0) mengendalikan kes di mana tiada baris seterusnya (untuk baris terakhir), menggantikan 0 untuk n.Value yang hilang. Perbezaan itu kemudiannya dikira dan dialiaskan sebagai Diff. Klausa akhir ORDER BY memastikan keputusan dibentangkan dalam susunan yang betul. Sebagai alternatif, anda boleh menggunakan COALESCE dan bukannya ISNULL. Pilihan bergantung pada sistem pangkalan data khusus anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Perbezaan Nilai Antara Baris Berturut-turut dalam Jadual Pangkalan Data Menggunakan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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