TIL_231114_Aggregate&Annotate

Sol Lee·2023년 11월 14일
0

Aggregate와 Annotate 사용해보기

레시피 정보를 보낼 때 그 레시피가 북마크된 수나, 별점의 평균값을 전달해주는데 튜터님이 Annotate와 Aggregate를 활용해보라고 추천하셨는데 까먹고 있다가 1차 피드백 받고 수정해봄

Aggregate

검색해보니 간단하게 말하면 기록된 항목의 집계를 구할 수 있도록 도와주는 장고 ORM중 하나인 것 같다.
집계를 위한 함수를 import하고 계산할 필드명을 적어주면 됨

오브젝트.annotate(집계함수('필드명'))

# 예시
StarRate.objects.all().aggregate(Avg('star_rate')) 
User.objects.filter(is_admin=True).aggregate(Count('id')) 

평균 별점 계산할 때 썼음.

Annotate

Annotate는 가상의 새로운 필드를 하나 추가하는 개념인 것 같다.
사용법은 Aggregate와 비슷하지만 필드명을 지정해줘야 함.

오브젝트.aggregate(새로운 필드명 = 집계함수('필드명'))

# 예시
StarRate.objects.all().annotate(star = Sum('star_rate'))
recipes.annotate(bookmark_count=Count('recipe_bookmark')).order_by('-bookmark_count')

정렬옵션 중 북마크 많은 순으로 정렬할 때 사용했음.


참고
https://velog.io/@jewon119/TIL00.-Django-ORM-Aggregate

profile
직업: 개발자가 되고 싶은 오레오 집사

0개의 댓글