SQL では、累積合計とは、データベース テーブル内の数値列の累計を計算できる方法を指します。累積合計は、進行状況の追跡や特定の値の移動平均の計算など、さまざまなシナリオで活躍します。
このチュートリアルでは、さまざまな方法とテクニックを使用して SQL で累積合計を実装および利用する方法を学びます。
サンプルデータ
累積合計を実装および使用する方法をより深く理解するために、サンプル データを使用して基本的なテーブルを設定することから始めましょう。これにより、この投稿ですべてのメソッドの動作を迅速かつ効率的に示すことができます。
まず、製品情報を保存する基本的なテーブルを作成します。
クリエイトテーブル製品 (
product_id INT 主キー、
製品名 VARCHAR ( 255 ) 、
価格 10 進数 ( 10 、 2 )
) ;
これにより、各製品の製品 ID、製品名、価格を保存する「products」という新しいテーブルが作成されます。
次に、次の挿入ステートメントの例に示すように、サンプル データの追加に進むことができます。
製品に挿入 ( 製品ID、製品名、価格 )
価値観
( 1 、 「ビジュアルスタジオコード」 、 10.00 ) 、
( 2 、 「崇高なテキスト」 、 80.00 ) 、
( 3 、 「PyCharm プロフェッショナル」 、 199.00 ) 、
( 4 、 「エクリプスIDE」 、 30.00 ) 、
( 5 、 「IntelliJ IDEA Ultimate」 、 699.00 ) 、
( 6 、 「GitHub デスクトップ」 、 20.00 ) 、
( 7 、 「待機ソフトウェア」 、 10.00 ) 、
( 8 、 「Xコード」 、 660.00 ) 、
( 9 、 「NetBeans」 、 0.00 ) 、
( 10 、 '原子' 、 60.00 ) ;
注: 指定されたデータは完全に架空のものです。リストされている商品の実際の価格を表すものではありません。
結果のテーブルは次のとおりです。
SQL累積和(自己結合)
特定の列に対して累積合計を実行するために使用できる手法の 1 つは、自己結合メソッドを使用することです。この方法の利点の 1 つは、Window 関数をサポートしていないデータベースであっても、ほぼすべての SQL データベースで機能することです。
先ほどの「製品」テーブルを例に考えてみましょう。次のクエリに示すように、価格列の累積合計を作成できます。
選択するp1.製品ID、
p1.製品名、
p1.価格、
和 ( p2.価格 ) AS 累積合計
から
製品p1
参加する
製品p2
の上
p1.製品ID > = p2.製品ID
グループ化
p1.製品ID、
p1.製品名、
p1.価格
注文方法
p1.製品ID;
クエリの仕組みに気づきましたか?そうでない場合は、順を追って説明しますので、最後までお付き合いください。
指定されたクエリ例では、自己結合を実行できるようにする「products」テーブルの 2 つのエイリアス「p1」と「p2」を作成することから始めます。
次に、「p1」の「product_id」が「p2」の「product_id」以上であるという条件で、「p1」と「p2」を結合します。
次のステップでは、基本的に各行の価格の累積合計を計算する sum() 関数を呼び出します。
最後に、「product_id」、「product_name」、「price」を使用して結果をグループ化し、結果を並べ替えます。
この操作の後、次の結果のテーブルに示されているように、各レコードの累積合計が得られます。
ご覧のとおり、前のすべての行の合計が得られます。最後の行には、前のすべての行の合計が含まれている必要があります。
SQL累積合計(ウィンドウ関数)
SQL で累積合計を計算するより効率的かつ実用的な方法は、サポートされているウィンドウ関数を利用することです。
SQL Server、PostgreSQL、または MySQL バージョン 8.0 以降などのデータベースを使用している場合、これは特定の列の累積合計を決定するための最も便利で推奨される方法です。
以下に示す例を見てください。
選択する製品番号、
商品名、
価格、
和 ( 価格 ) 以上 ( product_id で注文 ) AS 累積合計
から
製品;
この場合、まず「products」テーブルから「product_id」、「product_name」、および「price」列を選択します。
次に、OVER 句を使用して SUM() 関数をウィンドウ関数として使用します。
OVER句では、累積和を計算する順序を定義するORDER BY句を指定します。
これにより、次のような出力が返されるはずです。
ウィンドウ関数を使用すると、自己結合を使用するよりも一貫性があり、効率的で、読みやすいことがわかります。
結論
このチュートリアルでは、SQL の累積合計についてすべて学びました。また、自己結合とウィンドウ関数を使用して SQL で累積合計を実行する方法についても説明しました。