2010-05-31 2 views
4

별로 그룹화 날짜 속성에 합계 :장고 : 내가 장고에 SQL에서이 쿼리를 넣고 싶습니다 월/년

"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

aggregate 하나 개의 집계 값을 생성 할 수 있습니다.

다음 쿼리를 통해 현재 달의 시간 합계를 얻을 수 있습니다. 그래서

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

은 HourEntry의 모든 달의 집계 값을 얻으려면 수있는 DB의 모든 개월 동안의 검색어를 통해 루프. 그러나 원시 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

답변 해 주셔서 감사합니다. 원시 쿼리가 작동하지 않아서 제가 준 파이썬 코드를 사용했습니다. – sebpiq

+0

정말 작동합니까?! 스펙에서는 RAW 쿼리에 primary_key를 반드시 포함해야한다고 말합니다. "제외 할 수없는 필드는 기본 키 필드입니다. 장고는 기본 키를 사용하여 모델 인스턴스를 식별하므로 항상 포함되어야합니다 원시 쿼리. 기본 키를 포함하는 것을 잊어 버리면 InvalidQuery 예외가 발생합니다. " [여기/마지막 단락] (https://docs.djangoproject.com/en/dev/topics/db/sql/#deferring-model-fields) –

0

나는 이것이 검색어 세트 만 "날짜"와 "달"잎대로, values("date__month") 사용 후 "수량"에 집계 할 수없는 것 같아요.

+1

값에 대한 매개 변수에서 필드 조회를 사용할 수 없습니다 ... [ 필드 조회] (https://docs.djangoproject.com/en/dev/ref/models/querysets/#id4) –

관련 문제