前提・実現したいこと
下記のような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