ホームページ >データベース >mysql チュートリアル >SQLを使用してデータベーステーブル内の連続する行間の値の差を計算する方法
SQL を使用したデータベース テーブル内の連続する行の差の計算
行識別子として非連続整数 (rowInt
) と数値 (Value
) を含むデータベース テーブルがあるとします。 課題は、SQL を使用して連続する行の Value
の差を効率的に計算することです。
次のような単純なクエリでデータが取得されます。
<code class="language-sql">SELECT * FROM myTable ORDER BY rowInt;</code>
ただし、差を計算して表示する必要があります。 必要な出力形式は次のとおりです:
<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>
サブクエリとの自己結合を使用してこれを実現する方法は次のとおりです。
<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>
このクエリは、テーブル (LEFT JOIN
) の myTable
をそれ自体に対して実行します。c
(現在) および n
(次) というエイリアスが付けられます。 ON
句内のサブクエリは、現在の行の rowInt
より大きい最小 rowInt
を見つけて、次の行を効果的に識別します。 ISNULL(n.Value, 0)
は、次の行 (最後の行) がない場合を処理し、欠落している n.Value
を 0 に置き換えます。 次に、差分が計算され、Diff
としてエイリアスが付けられます。最後の ORDER BY
句は、結果が正しい順序で表示されることを保証します。 あるいは、COALESCE
の代わりに ISNULL
を使用することもできます。 選択は、特定のデータベース システムによって異なります。
以上がSQLを使用してデータベーステーブル内の連続する行間の値の差を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。