-
[Django] ORM으로 Aggregation 함수와 Group by 사용언어/파이썬 & 장고 2018. 7. 14. 23:29
쿼리에서 aggregation함수(count(), max(), first() 등등) 와 필요한 컬럼을 출력하는 방법은 아래와 같습니다.
SELECT name AS changed_name, count(count) FROM test GROUP BY name;
위와 같은 쿼리는 아래와 같이 장고 ORM으로 표현할 수 있습니다.
queryset = Test.objects.values('name').annotate( max_count=Count('count'), changed_name=F('name') ).values('max_count', 'changed_name')
aggregation 함수를 사용하기 전, group by를 진행할 필드를 지정해 줍니다.
queryset = Test.objects.values('name')
group by를 진행할 필드를 작성한 다음, annotate()를 사용해서 aggregation과 변경할 이름을 작성합니다.
queryset = Test.objects.values('name').annotate( max_count=Count('count'), changed_name=F('name') )
마지막으로 호출하고자 하는 필드를 지정해 줍니다. 이때는 annotate()에서 변경한 이름을 지정합니다.
queryset = Test.objects.values('name').annotate( max_count=Count('count'), changed_name=F('name') ).values('max_count', 'changed_name')