【コピペで使える】MySQLで1分毎にデータを集計する方法(アクセスログ等)

今回は備忘録として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を含めるなどして対応もできそうです。