sql >> データベース >  >> RDS >> Mysql

MySQLで累積合計を計算する方法

    多くの場合、売上などの特定の列の現在の合計または累積合計を計算する必要があります。 MySQLには累積合計を計算する関数がないため、SQLクエリを介して計算する必要があります。これは、MySQLの累積合計を計算するためのSQLクエリです。

    MySQLで累積合計を計算する方法

    MySQLで累積合計を計算する方法は次のとおりです。次の表に毎日の売上データが含まれているとします。

    mysql> create table sales(order_date date,sale int);
    
    mysql> insert into sales values('2020-01-01',20),
    ('2020-01-02',25),('2020-01-03',15),('2020-01-04',30),('2020-01-05',20);
    
    mysql> select * from sales;
    +------------+------+
    | order_date | sale |
    +------------+------+
    | 2020-01-01 |   20 |
    | 2020-01-02 |   25 |
    | 2020-01-03 |   15 |
    | 2020-01-04 |   30 |
    | 2020-01-05 |   20 |
    +------------+------+
    

    たとえば、売上の累積合計を計算したいとします。

    +------------+------+-----------------+
    | order_date | sale | cumulative_sale |
    +------------+------+-----------------+
    | 2020-01-01 |   20 |              20 |
    | 2020-01-02 |   25 |              45 |
    | 2020-01-03 |   15 |              60 |
    | 2020-01-04 |   30 |              90 |
    | 2020-01-05 |   20 |             110 |
    +------------+------+-----------------+
    

    MySQLで累積合計を計算するためのSQLクエリは次のとおりです。

    mysql> set @csum := 0;
    mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale
           from sales
           order by order_date;
    +------------+------+-----------------+
    | order_date | sale | cumulative_sale |
    +------------+------+-----------------+
    | 2020-01-01 |   20 |              20 |
    | 2020-01-02 |   25 |              45 |
    | 2020-01-03 |   15 |              60 |
    | 2020-01-04 |   30 |              90 |
    | 2020-01-05 |   20 |             110 |
    +------------+------+-----------------+
    

    ボーナスリード:MySQLでピボットテーブルを作成する方法

    上記のクエリでは、一時変数csumを0に設定します。次に、各行について、それを使用して累積合計を計算して保存します。

    この累積合計はどの列にも格納されないことに注意してください。結果に表示されるだけです。

    この値を保存する場合は、テーブルに新しい列を追加し、以下に示すようにUPDATE句を使用する必要があります。

    mysql> alter table sales add column cumulative_sum int;
    
    mysql> set @csum := 0;
    
    mysql> update sales
           set cumulative_sum = (@csum := @csum + sale)
           order by order_date;
    
    mysql> select order_date,sale,cumulative_sum from sales;
    +------------+------+----------------+
    | order_date | sale | cumulative_sum |
    +------------+------+----------------+
    | 2020-01-01 |   20 |             20 |
    | 2020-01-02 |   25 |             45 |
    | 2020-01-03 |   15 |             60 |
    | 2020-01-04 |   30 |             90 |
    | 2020-01-05 |   20 |            110 |
    +------------+------+----------------+
    

    以下に示すように、WHERE句またはJOINSを使用して、SQLクエリをカスタマイズしてフィルターを含めることができます

    mysql> set @csum := 0;
    mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale
           from sales where <condition>
           order by order_date;
    
    

    ボーナスリード:MySQLで中央値を計算する方法

    MySQLには累積合計の組み込み関数がないため、上記のSQLクエリを使用してMySQLの累積合計を計算できます。

    MySQLで累積合計を計算できたら、以下に示すように、グラフ作成ツールを使用して、それらを折れ線グラフまたは棒グラフとして簡単にプロットできます。これは、Ubiqを使用して作成されたグラフの例です。

    MySQLデータベースからチャート、ダッシュボード、レポートを作成したい場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。

    1. 64ビットアプリケーションをAcombaに接続する

    2. SQLで月と日の両方の2つの日付の差を取得します

    3. DATETIME列のランダム値

    4. SQLでJSONオブジェクトの配列として返す(Postgres)