2011-01-18 3 views
3

날짜 및 월별로 그룹화 된 특정 열의 합계를 계산해야합니다.Django QuerySet에서 사용자 정의 된 복잡한 그룹을 수행 할 수 있습니까?

select sum(amount) from somewhere group by extract(year from date), extract(month from date) 

이이 장고 QuerySet과 같이 표현 될 수있다 : SQL (포스트 그레스)에서는 다음과 같이 보일 것인가? 나처럼 보일 수는 없지만, 평범한 구형 SQL을 사용하고 싶지는 않습니다. 다른 아이디어는 환영합니다.

queryset.query.group_by을 사용하는 것이 가능할 것으로 보이지만 그로 인해 어떤 행운이 없었습니다. 작동 예제가 환영받을 것입니다.

답변

8

extra 메서드를 사용하면 집계를 수행하기 전에 연도와 날짜 값을 더할 수 있습니다.

Somewhere.objects.extra(select={'year': 'EXTRACT(year FROM date)', 
           'month': 'EXTRACT(month FROM date)'} 
         ).values_list('year', 'month').annotate(Sum('amount')) 
+0

감사합니다. 이런 식으로 생각하지 않았습니다! – VoY

+0

** PostgreSQL ** 사용자들에게는'.extra (select = { 'date': "date_trunc ('month', date)"}))'하는 것이 더 효율적입니다. 매월 첫날에 대한 날짜를 제공합니다. – intgr