문제

Django 1.1에는 새로운 집계 방법이 있다는 것을 알고 있습니다. 그러나 다음 쿼리와 동등한 것을 알 수 없었습니다.

SELECT player_type, COUNT(*) FROM players GROUP BY player_type;

Django 1.1의 모델 쿼리 API에서는 가능합니까, 아니면 일반 SQL을 사용해야합니까?

도움이 되었습니까?

해결책

Django 1.1 베타 (트렁크)를 사용하는 경우 :

Player.objects.values('player_type').order_by().annotate(Count('player_type'))
  • values('player_type') - 포함 할 만하면 player_type 필드로 GROUP BY 절.
  • order_by() - 제외를 위해 필요한 필드 포함을 초래할 수있는 기본 주문. SELECT 그리고 GROUP BY.

다른 팁

Django 1.1은 Count와 같은 집계 방법을 지원합니다. 당신은 찾을 수 있습니다 여기 전체 문서.

질문에 답하기 위해 다음의 선을 따라 무언가를 사용할 수 있습니다.

from django.db.models import Count
q = Player.objects.annotate(Count('games'))
print q[0]
print q[0].games__count

실제 모델에 따라 약간의 조정이 필요합니다.

편집 : 위의 스 니펫은 객체별로 집계를 생성합니다. 모델의 특정 필드에서 집계를 원한다면 values 방법:

from django.db.models import Count
q = Player.objects.values('playertype').annotate(Count('games')).order_by()
print q[0]
print q[0].games__count

order_by() 기본 순서에있는 필드가 명시 적으로 전달되지 않더라도 자동으로 선택되기 때문에 필요합니다. values(). 이 전화 order_by() 모든 주문을 지우고 쿼리가 예상대로 작동하게합니다.

또한 그룹화에 사용되는 필드를 계산하려면 COUNT(*)), 당신이 사용할 수있는:

from django.db.models import Count
q = Player.objects.values('playertype').annotate(Count('playertype')).order_by()
print q[0]
print q[0].playertype__count
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top