Django: сумма по атрибуту даты, сгруппированная по месяцу / году - PullRequest
5 голосов
/ 31 мая 2010

Я бы хотел поместить этот запрос из SQL в Django:

"select date_format(date, '%Y-%m') as month, sum(quantity) as hours from hourentries group by date_format(date, '%Y-%m') order by date;"

Часть, которая вызывает проблемы - группировка по месяцам при агрегировании. Я попробовал это (что казалось логичным), но это не сработало:

HourEntries.objects.order_by("date").values("date__month").aggregate(Sum("quantity"))

Ответы [ 2 ]

2 голосов
/ 31 мая 2010

aggregate может генерировать только одно агрегированное значение.

С помощью следующего запроса вы можете получить общую сумму часов текущего месяца.

from datetime import datetime
this_month = datetime.now().month
HourEntries.objects.filter(date__month=this_month).aggregate(Sum("quantity"))

Итак, чтобы получить совокупные значения HourEntry за все месяцы, вы можете перебрать набор запросов для всех месяцев в БД. Но лучше использовать сырой sql.

HourEntries.objects.raw("select date_format(date, '%Y-%m') as month, sum(quantity) as hours from hourentries group by date_format(date, '%Y-%m') order by date;")
0 голосов
/ 31 мая 2010

Я полагаю, что вы не можете агрегировать по «количеству» после использования values("date__month"), так как в QuerySet остаются только «дата» и «месяц».

...