今回は備忘録としてMySQLで1分毎のアクセス数を集計するためのSQL文を記載します。
想定しているシステムはアクセスログで集計時に1分毎のアクセス数を出力したいといった場合です。
このときWebアプリケーション(PHP)側でこの処理を行うとかなり動作が重くなってしまいますが、この処理をSQL側で担当できれば処理は飛躍的に軽くなります。
検索対象のテーブル構成(pageviews)
- ・id
- ・ipaddress
- ・created
SQL文
SELECT from_unixtime(round(unix_timestamp(created) div (1 * 60)) * (1 * 60)) as timekey, count(ipaddress) FROM pageviews GROUP BY timekey;
これだけの記述で目的の集計結果が得られるのは嬉しいですね。
同一IPアドレスは1とカウントしたいといった場合には、GROUP BYにipaddressを含めるなどして対応もできそうです。