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
'IT > 파이썬' 카테고리의 다른 글
Python - UnicodeDecodeError: 'cp949' 에러 해결 방법 (0) | 2023.05.04 |
---|---|
Django ORM - aggregation sum 결과가 0 인 결과 배제하기 (0) | 2023.05.04 |
Django - SQL group by 를 ORM 에서 구현하기 (0) | 2023.05.01 |
Django - ORM aggregation 함수 설명과 예 (0) | 2023.05.01 |
Django - Rest-framework API 서버 구현 with Django Ninja (0) | 2023.04.28 |