前提・実現したいこと
下記のようなDBから月ごとの売上、月時点での累積和を集計したいです。
orders
id | ordered_at |
---|---|
1 | 2021-01-01 |
2 | 2021-01-02 |
3 | 2021-02-01 |
4 | 2021-02-02 |
item_order
id | order_id | item_id | price |
---|---|---|---|
1 | 1 | 35 | 500 |
2 | 1 | 58 | 300 |
3 | 2 | 12 | 600 |
4 | 2 | 18 | 200 |
5 | 2 | 37 | 900 |
6 | 3 | 35 | 500 |
7 | 3 | 58 | 300 |
8 | 4 | 12 | 600 |
9 | 4 | 18 | 200 |
###理想の集計結果
monthly_saleが月ごとの売上、salesが月時点での累積和
ordered_month | monthly_sales | sales |
---|---|---|
2021-01 | 2500 | 2500 |
2021-02 | 1600 | 4100 |
試したこと
SQL
1SELECT 2DATE_FORMAT(orders.ordered_at,'%Y-%m') as ordered_month, 3SUM(price) as monthly_sales, 4FROM item_order 5INNER JOIN orders ON item_order.order_id=orders.id 6WHERE orders.ordered_at BETWEEN '2021/01/01' AND '2021/12/31' 7GROUP BY DATE_FORMAT(orders.ordered_at, '%Y-%m');
上記SQLで月ごとの売上集計までは出来ています。
ordered_month | monthly_sales |
---|---|
2021-01 | 2500 |
2021-02 | 1600 |
アプリケーション側で合わせたほうが良いことはわかっていますが、
どうしてもSQLで完結させたいです。
スマートな方法でなくても構いません。
補足情報(FW/ツールのバージョンなど)
MySQL8
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/07 06:51
2021/10/07 07:28
2021/10/07 07:35