본문 바로가기

Django ORM으로 Group by 필드 구현하는 방법은 아래 글을 이길 수가 없어요. 완전 잘 써놓으셔서 들어가서 읽고 감탄만 하시길!!

정리해 보면,
1. 먼저 Group by 할 필드를 정해서 values에 넣고
.values("필드") 
2. 함수를 불러서 쓰고
.annotate(Count(), Sum(), Avg(), ...)
3. 보여줄 필드를 다시 정리하고
.values("필드", "필드", ...)

 

즉, values 를 2번 불러 쓰면 된다. 

 

[Django] ORM으로 Aggregation 함수와 Group by 사용

 

[Django] ORM으로 Aggregation 함수와 Group by 사용

쿼리에서 aggregation함수(count(), max(), first() 등등) 와 필요한 컬럼을 출력하는 방법은 아래와 같습니다.SELECT name AS changed_name, count(count) FROM test GROUP BY name; 위와 같은 쿼리는 아래와 같이 장고 ORM으

brownbears.tistory.com

 

그냥 마무리 하긴 어색하니깐 예제를 새로운 걸로 하나 더 소개해 본다.

Django ORM을 사용하여 Aggregation 함수와 Group by를 사용하는 예제를 더 보여드리겠습니다.

예를 들어, 다음과 같은 쿼리는 장고 ORM으로 다음과 같이 표현할 수 있습니다.

from django.db.models import Count

result = Members.objects.values('designation').annotate(
    dcount=Count('designation')
).order_by()

이 쿼리는 다음과 유사한 SQL 쿼리를 생성합니다.

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

결과는 다음과 같은 형태로 반환됩니다.

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

order_by()를 포함하지 않으면 기본 정렬이 예상한 것이 아닐 경우 잘못된 결과가 나올 수 있습니다 .

 

참고로 그냥 Group by 없이 모든 쿼리 결과를 합하고 싶다면

aggregate

특정 필드 전체에 대한 연산은 애그리게이션(aggregate)

Django 에서는 필드 전체의 합, 평균, 개수 등을 계산할 때 사용한다

from django.db.models import F, Sum, Count, Case, When

order_log.aggregate(totle_price=Sum('price'))
{'total_price': 262200}

from https://velog.io/@may_soouu/%EC%9E%A5%EA%B3%A0-Annotate-Aggregate

 

🚦 장고 Annotate & Aggregate

두가지의 모델이 있고, foreign key로 연결됐다고 가정해보자그럼 쿼리셋 결과가이런식으로 언더바가 그대로 나온다. annotate를 써서 바꿔보자그럼 결과가 이렇게 나온다!!! ex. 날짜별(created)로 값을

velog.io

참고 사이트

https://raccoonyy.github.io/django-annotate-and-aggregate-like-as-excel/

정말 엄청난 글이다. 읽어보면 짱!

 

(엑셀만큼 쉬운) Django Annotation/Aggregation

Django ORM을 강력하게 만들어주는 기능 중 하나는 바로 애너테이션(annotate)과 애그리게이션(aggregate)입니다. 이 두 기능이 명쾌하게 와닿지 않아서 사용하지 못하다가, 엑셀에 빗대어 이해해보니

blog.raccoony.dev

annotate 그릇에 잘 정리해서 담아야 계산이 쉽겠죠

 

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.