MySQLで曜日ごとに集計する
2010年8月12日 2016年9月12日
PHP&MySQLでWebアプリ作成中に、曜日ごとの集計をすることに。
このあたりはよく忘れてその都度調べることになるので、自分用にメモ。
SELECT (CASE WHEN DATE_FORMAT(created, '%W') = 'Monday' THEN '月曜日' WHEN DATE_FORMAT(created, '%W') = 'Tuesday' THEN '火曜日' WHEN DATE_FORMAT(created, '%W') = 'Wednesday' THEN '水曜日' WHEN DATE_FORMAT(created, '%W') = 'Thursday' THEN '木曜日' WHEN DATE_FORMAT(created, '%W') = 'Friday' THEN '金曜日' WHEN DATE_FORMAT(created, '%W') = 'Saturday' THEN '土曜日' WHEN DATE_FORMAT(created, '%W') = 'Sunday' THEN '日曜日' END) AS week, COUNT(*) AS num, COUNT(DISTINCT(cookie)) as `unique` FROM logs WHERE (user_id = :USERID AND status = 1) GROUP BY week
これで、PHPからfetchしていけば、こんな感じで利用できます。
array( 0 => array( [week] => 月曜日, [num] => 11770, [unique] => 3770, ), 1 => array( [week] => 火曜日, [num] => 7770, [unique] => 3270, ), ~略 );
おまけ:PostgreSQL用!?
検索している最中にみつけたもので、PostgreSQL専用っぽいですがCASE部分はこんな書き方ができる模様。
こちらもあくまでも自分用のメモとして残しておきます(こちらは試してないので動くか分かりませんが)。
(CASE WHEN DATE_PART('dow',created) = 0 THEN '日曜日' WHEN DATE_PART('dow',created) = 1 THEN '月曜日' WHEN DATE_PART('dow',created) = 2 THEN '火曜日' WHEN DATE_PART('dow',created) = 3 THEN '水曜日' WHEN DATE_PART('dow',created) = 4 THEN '木曜日' WHEN DATE_PART('dow',created) = 5 THEN '金曜日' WHEN DATE_PART('dow',created) = 6 THEN '土曜日' END ) AS week,