개발 문서/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를 수행하는 방법을 살펴보았습니다. 본 포스팅이 도움이 되었기를 바랍니다!