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
Lepaskan: 2025-01-10 15:22:43
asal
799 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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