【SQL】日別の表に集計行を入れる
1日1行の表に、1週間ごとの集計行を入れる方法
select date_, num
-- date_ | num
-- 10/1(mon) | 5
-- 10/2(tue) | 3
-- 10/7(sun) | 2
-- 10/8(mon) | 8
というデータがあるとする。ここに月~日の1週間ごとに集計行を入れます
まず週番号を入れる
select week(date_, 1) as `week`, date_
-- week | date_
-- 31 | 10/1(mon)
-- 31 | 10/2(tue)
-- 31 | 10/7(sun)
-- 32 | 10/8(mon)
第二引数で月曜始まりか日曜始まりか、などいろいろ設定できるので、リファレンスを見てみてください。
週番号でまとめる
select week(date_, 1) as `week`, date_, num
group by week, date_ with rollup
-- week | date_ | num
-- 31 | 10/1(mon)| 5
-- 31 | 10/2(tue)| 3
-- 31 | 10/7(sun)| 2
-- 31 | null | 10
-- 32 | 10/8(mon)| 8
これで週ごとに集計行を入れることができます。
集計行をわかりやすくする
select case when date_ is null then '計' else date_ end as `date`, num
group by week, date_ with rollup
-- date | num
-- 10/1(mon)| 5
-- 10/2(tue)| 3
-- 10/7(sun)| 2
-- 計 | 10
-- 10/8(mon)| 8
これでおしまいです。