[DRF] Django ORM에서 GROUP BY

JinUk Lee·2023년 11월 14일
0

DRF 학습하기

목록 보기
42/54

Django ORM에서 GROUP BY를 하려면 annotatevalues를 사용한다.

여기서 values('keyword')GROUP BY로 묶을 컬럼을 지정해주고

annotate 는 위에서 묶은 집단에서의 집계함수를 새로 생성하는 개념이라고 생각할 수 있다.

queryset = Record.objects.all().values('character')

Record라는 모델에서 character 컬럼의 값이 같은것끼리 묶는다.

쿼리셋을 출력해보면 다음과 같다.

여기서 출력되는 것은 전체 쿼리셋이다.

그 뒤에 annotate를 붙여보자

queryset = Record.objects.all().values('character').annotate(count=Count('*'))

3개였던 쿼리셋이 character 의 값이 같은 2개가 묶여 2개로 출력된다.

그러고 count라는 값이 새로 생성된 것을 볼 수 있다.

annotate(count=Count('*'))의 뜻은 count라는 컬럼을 새로 만들고 그 값으로 Count('*')를 담겠다는 뜻이다.

여기에 새로 annotate를 추가해보자.

Record.objects.all().values('character').annotate(count=Count('*')).annotate(avgdmg=Avg('damageToPlayer'))

뒤에 새로운 annotate를 달아줬더니 쿼리에도 새로운 컬럼이 생성되었다.

이 두개를 한번에 사용해도 결과는 똑같이 나온다.


Record.objects.all().values('character').annotate(count=Count('*'),avgdmg=Avg('damageToPlayer'))
profile
개발자 지망생

0개의 댓글