Django+mysqlでDateFieldを月ごとに集計する。

関連 : mysqlでdate型を月毎に集計する - brainstorm

昨日SQLで書いたやつをDjangoのquerysetで書けるかどうかいろいろ試してみた。

実行したいSQL

select DATE_FORMAT(event_date, "%Y%m") as ym, count(id) as count 
from event group by DATE_FORMAT(event_date, "%Y%m");


django

>>> select = dict(ym="DATE_FORMAT(event_date, '%%Y%%m')")
>>> qs = Event.objects.extra(select=select)
>>> qs = qs.values("ym").annotate(cnt=Count('id'))
>>> qs
SELECT (DATE_FORMAT(event_date, '%Y%m')) AS `ym`,
       COUNT(`event`.`id`) AS `cnt`
FROM `event`
GROUP BY (DATE_FORMAT(event_date, '%Y%m'))
ORDER BY NULL LIMIT 21

これだったらrawで生のSQLを書いたほうが解りやすそう。