2011-04-18 2 views
1

를 검색어 세트. 이 일을 쉽게 할 수 있습니까? (즉 추가 컴퓨팅없이?)장고 내가이 같은 모델을 선택 평균 최상의 결과

지금까지 내가 왔어요 :

Quiz.objects.values('school_class').annotate(avg=Avg('points'),max=Max('points')).order_by('-avg') 

하지만 어떻게 나는 또한 최고 점수를 사용자에게 어떻게해야합니까?

+0

동일한 쿼리 내에서 가능하지 않다고 생각합니다. – vartec

+0

그러면 두 번째 쿼리는 어떻게 생겼을까요? 지금까지 나는'Quiz.objects.all(). values ​​("user", "school_class") order_by ('- points')' 어떻게 최상을 돌려 줄까요? – Robus

+0

주어진 클래스'Quiz.objects.get (school_class = school_class, points = max)'의 최대 포인트 (이전 쿼리에서 가지고있는)를 가진 사용자. 그러나 문제는 최대 점수를 가진 점수가 둘 이상있을 수 있다는 것입니다.'.get()'대신'.filter()'를 사용해야합니다. – vartec

답변

0

두 번째 쿼리가 필요합니다. ('- 날짜'), 또는 [0 하나만을 원하는 경우, ('날짜') .latest을 .latest를 추가

quizzes = Quiz.objects.values('school_class').annotate(avg=Avg('points'),max=Max('points')).order_by('-avg') 

Quiz.objects.values('user','school_class').filter(points=quizzes.max) 

: 당신은 당신의 테이블을 주문에 저장하는 첫 번째의 결과를 사용할 수 있습니다 ] 하나만 구하십시오.