ホームページ >データベース >mysql チュートリアル >SQLを使用してデータベーステーブル内の連続する行間の値の差を計算する方法

SQLを使用してデータベーステーブル内の連続する行間の値の差を計算する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-10 15:22:43802ブラウズ

How to Calculate the Value Difference Between Consecutive Rows in a Database Table Using 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。