首頁 >資料庫 >mysql教程 >如何計算 SQL 表中的行值差異?

如何計算 SQL 表中的行值差異?

Susan Sarandon
Susan Sarandon原創
2025-01-10 15:18:46176瀏覽

How to Calculate Row Value Differences in a SQL Table?

高效計算 SQL 表中的行值差異

本指南示範了兩種計算 SQL 表中連續行值之間差異的方法,並著重於非順序表結構。 第一種方法適用於所有 SQL 版本,而第二種方法則利用視窗函數來提高 SQL Server 2012 及更高版本的效能。

方法一:自加入(所有 SQL 版本)

此方法使用 LEFT JOIN 根據行標識符將每行與其後續行進行比較(本例中為 rowInt)。

<code class="language-sql">SELECT
   current.rowInt,
   current.Value,
   ISNULL(next.Value, 0) - current.Value AS ValueDifference
FROM
   sourceTable AS current
LEFT JOIN
   sourceTable AS next
      ON next.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > current.rowInt)</code>

ISNULL 函數處理行沒有後繼(最後一行)的情況,分配差值 0 以避免 NULL 值。

方法 2:LEAD() 視窗函數(SQL Server 2012 及更高版本)

為了提高較新 SQL Server 版本的效率,LEAD() 視窗函數提供了更簡化的解決方案:

<code class="language-sql">SELECT
  RowInt,
  Value,
  LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value AS ValueDifference
FROM
  sourceTable</code>

LEAD(Value, 1, 0) 檢索下一行(偏移量 1)的值,如果不存在下一行,則預設為 0。 這直接計算差異,消除了自連接的需要。 這種方法通常更快且更具可讀性。

以上是如何計算 SQL 表中的行值差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn