【SQL】日別の表に集計行を入れる

1 min読了の目安(約900字TECH技術記事

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

これでおしまいです。