개발 문서/Django
Django ORM에서 Group By 사용하기
copg
2024. 1. 18. 20:25
728x90
반응형
Django ORM에서 Group By 사용하기
Django ORM은 강력하고 직관적인 쿼리 언어를 제공합니다. 그 중에서도 group by
는 데이터를 그룹화하고 집계하는 데에 매우 유용합니다. 이번 포스팅에서는 Django ORM을 사용하여 group by
를 어떻게 수행하는지 살펴보겠습니다.
1. 모델 정의하기
우선 예제를 위해 간단한 모델을 정의해봅시다. 예를 들어, 학생의 성적을 나타내는 모델을 사용하겠습니다.
# models.py
from django.db import models
class Student(models.Model):
name = models.CharField(max_length=100)
score = models.IntegerField()
2. Group By 쿼리 작성하기
이제 모델을 정의했으니, 실제로 group by
를 사용하는 쿼리를 작성해봅시다. 아래의 예제는 성적별로 그룹화하여 각 그룹의 평균 성적을 가져오는 쿼리입니다.
# views.py
from django.db.models import Avg
def average_score_by_student():
result = (
Student.objects
.values('score') # 'score' 필드를 기준으로 그룹화
.annotate(average_score=Avg('score')) # 각 그룹의 평균 성적 계산
)
return result
위 코드에서 values('score')
는 'score' 필드를 기준으로 그룹화하겠다는 의미이고, annotate(average_score=Avg('score'))
는 각 그룹에 대해 'score' 필드의 평균을 계산하여 'average_score'라는 새로운 필드로 추가합니다.
3. 결과 확인하기
위의 쿼리를 실행하고 결과를 확인해봅시다.
# 예제 실행 코드
result = average_score_by_student()
for entry in result:
print(f"Score: {entry['score']}, Average Score: {entry['average_score']}")
이제 학생들의 성적을 그룹화하고 각 그룹의 평균 성적을 출력할 수 있습니다.
이렇게 Django ORM을 사용하여 group by
를 수행하는 방법을 살펴보았습니다. 본 포스팅이 도움이 되었기를 바랍니다!