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를 사용하는 예제를 더 보여드리겠습니다.
예를 들어, 다음과 같은 쿼리는 장고 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
참고 사이트
https://raccoonyy.github.io/django-annotate-and-aggregate-like-as-excel/
정말 엄청난 글이다. 읽어보면 짱!
'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 |