ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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')


    댓글