어떻게하면 여러 제약 조건을 가진 레코드를 Django의 집계 기능을 사용하여 계산할 수 있습니까?Django 집계 기능을 사용하여 여러 개의 contrains을 필터링 할 수 있습니까?
django 트렁크를 사용하여 복잡한 데이터베이스 관련 SQL 문을 django 집계로 대체하려고합니다.
domains <- blog -> comment
다음 SQL이에 대한 의견을 계산 : 예를 들어, 나는 각 복용 많은 의견 (.co.uk에서, .COM, .etc를 생각하는) 여러 도메인에서 실행중인 블로그를위한 테이블 구조 데이터베이스를 갖고 있다고 도메인 단위는 :
Domain.objects.annotate(Count('blogs__comments'))
이 단계 푸르트 촬영 :
SELECT D.id, COUNT(O.id) as CommentCount FROM domain AS D
LEFT OUTER JOIN blog AS B ON D.blog_id = B.id
LEFT OUTER JOIN comment AS C ON B.id = C.blog_id
GROUP BY D.id
이 용이하여 복제
SELECT D.id, COUNT(O.id) as CommentCount FROM domain AS D
LEFT OUTER JOIN blog AS B ON D.blog_id = B.id
LEFT OUTER JOIN comment AS C ON B.id = C.blog_id
AND C.active = True
GROUP BY D.id
이 훨씬 더 어려운 장고는 WHERE 절 전체 shaboodle에 필터링을 포함한 보인다 복제하는 것입니다 : 어, 나는 다음과 같은 SQL을 하나 개 이상의 제약을 추가하고 복제 할 수 있도록하고 싶습니다 : 내가 적절한에 여분의 제약 조건을 팝업으로 장고를 설득 할 수있는 방법
SELECT ..., COUNT(comment.id) AS blog__comments__count FROM domain
LEFT OUTER JOIN blog ON domain.blog_id = blog.id
LEFT OUTER JOIN comment ON blog.id = comment.blog_id
WHERE comment.active = True
GROUP BY domain.id
ORDER BY NULL
:
Domain.objects.filter(blogs__comments__active=True)
.annotate(Count('blogs__comments'))
SQL은 다음과 같이 나온다 LEFT OUTER JOIN
? 댓글이없는 블로그의 수를 포함하고자 할 때 중요합니다.
이 주제를 다시 연구 할 때 당분간이 문제를 해결할 수있는이 페이지를 보았습니다. http://www.voteruniverse.com/Members/jlantz/blog/conditional-aggregates-in-django – Mat