본문 바로가기
Python/Python FAQ

Python Django에서 GROUP BY를 사용하여 쿼리하는 방법은 무엇인가요?, How to query as GROUP BY in Django?

by 베타코드 2023. 10. 18.
반응형

질문


나는 모델을 쿼리합니다:

Members.objects.all()

그리고 다음과 같이 반환됩니다:

Eric, Salesman, X-Shop
Freddie, Manager, X2-Shop
Teddy, Salesman, X2-Shop
Sean, Manager, X2-Shop

내가 원하는 것은 데이터베이스로 group_by 쿼리를 실행하는 최상의 Django 방법을 알고 싶습니다:

Members.objects.all().group_by('designation')

물론 작동하지 않습니다. django/db/models/query.py에서 어떤 트릭을 사용할 수 있다는 것은 알고 있지만, 패치 없이 어떻게 할 수 있는지 궁금합니다.


답변


만약 집계를 하려면 ORM의 집계 기능을 사용할 수 있습니다:

from django.db.models import Count
result = (Members.objects
    .values('designation')
    .annotate(dcount=Count('designation'))
    .order_by()
)

이는 다음과 유사한 쿼리 결과를 가져옵니다:

SELECT designation, COUNT(designation) AS dcount
FROM members GROUP BY designation

그리고 결과는 다음과 같은 형태일 것입니다:

[{'designation': 'Salesman', 'dcount': 2}, 
 {'designation': 'Manager', 'dcount': 2}]

order_by()를 포함하지 않으면 기본 정렬이 예상한 것과 다를 수 있으므로 잘못된 결과를 얻을 수 있습니다.

결과에 여러 필드를 포함하려면 values에 인수로 추가하면 됩니다. 예를 들어:

    .values('designation', 'first_name', 'last_name')

참고 자료:

반응형

댓글