Django는 Group By와의 카운트에 해당합니다
-
20-08-2019 - |
문제
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
제휴하지 않습니다 StackOverflow