WEBスクレイピングをしていて、cronで12時と16時に定期実行しているシステムがあります。ある数を取得して、その件数をDBにインサートしていますが、以下のように1回のcronの実行で複数カラム存在していている状況です。

このインサート結果をMySQLで日毎且つ、12時台と16時台に分けて出力します。

mysql> select * from item_count;
+----+-------+---------------------+
| id | count | created_at          |
+----+-------+---------------------+
|  1 |    22 | 2019-04-02 12:00:19 |
|  2 |    25 | 2019-04-02 12:01:25 |
|  3 |    10 | 2019-04-02 12:02:31 |
|  4 |    28 | 2019-04-02 16:01:38 |
|  5 |    41 | 2019-04-02 16:02:44 |
|  6 |     4 | 2019-04-02 16:03:56 |
|  7 |     1 | 2019-04-02 16:05:02 |
|  8 |    81 | 2019-04-03 12:00:20 |
|  9 |    26 | 2019-04-03 12:01:26 |
| 10 |   131 | 2019-04-03 12:02:31 |
+----+-------+---------------------+
10 rows in set (0.00 sec)

集計結果

日毎且つ、12時台と16時台に分けて出力した結果は、以下のとおりです。

mysql> SELECT DATE_FORMAT(created_at, '%Y年%m月%d日%H時') AS date, SUM(count) AS sum FROM item_count GROUP BY date;
+------------------------+------+
| date                   | sum  |
+------------------------+------+
| 2019年04月02日12時      |   57 |
| 2019年04月02日16時      |   84 |
| 2019年04月03日12時      |  138 |
+------------------------+------+
3 rows in set (0.00 sec)

DATE_FORMATで日時毎になるようにし、GROUPBYを使い12時台と16時台をまとめます。そしてSUMを使い、countカラムの合計値を求めます。

参考

MySQL 日時ごとの集計まとめ