반응형
Django : 쿼리를 통해 열 값의 합계 계산
나는 모델이있다
class ItemPrice( models.Model ):
price = models.DecimalField ( max_digits = 8, decimal_places=2 )
....
price
이 쿼리 세트 의 합계를 계산하기 위해 이것을 시도했습니다 .
items = ItemPrice.objects.all().annotate(Sum('price'))
이 쿼리에서 무엇이 잘못 되었습니까? 또는 price
열의 합계를 계산하는 다른 방법이 있습니까?
나는 이것이 queryset에서 for 루프를 사용하여 수행 할 수 있다는 것을 알고 있지만 우아한 솔루션이 필요합니다.
감사!
당신은 아마 찾고 있습니다 aggregate
from django.db.models import Sum
ItemPrice.objects.aggregate(Sum('price'))
Annotate는 결과에 필드를 추가합니다.
>> Order.objects.annotate(total_price=Sum('price'))
<QuerySet [<Order: L-555>, <Order: L-222>]>
>> orders.first().total_price
Decimal('340.00')
Aggregate는 요청 된 결과와 함께 사전을 반환합니다.
>> Order.objects.aggregate(total_price=Sum('price'))
{'total_price': Decimal('1260.00')}
집계 (Sum ( 'column')) [ 'column__sum'] 사용
sum = Sale.objects.filter(type='Flour').aggregate(Sum('column'))['column__sum']
cProfile 프로파일 러를 사용하면 개발 환경에서 .NET을 사용 하여 집계하는 것보다 목록의 값을 합산하는 것이 더 효율적 (빠름)이라는 것을 알았습니다 Sum()
. 예 :
sum_a = sum([item.column for item in queryset]) # Definitely takes more memory.
sum_b = queryset.aggregate(Sum('column')).get('column__sum') # Takes about 20% more time.
나는 이것을 다른 맥락에서 테스트 aggregate
했으며 동일한 결과를 생성하는 데 항상 더 오래 걸리는 것처럼 보입니다 . 목록을 합산하는 대신 사용하는 것이 메모리 현명한 이점이 있다고 생각하지만.
반응형
'Development Tip' 카테고리의 다른 글
HTML 테이블의 행 수를 가져 오는 JavaScript (0) | 2020.12.13 |
---|---|
webWorker에서 localStorage에 액세스 (0) | 2020.12.13 |
phpmyadmin 파일 크기가 너무 커서 데이터베이스를 가져올 수 없습니다. (0) | 2020.12.13 |
angularjs의 범위에 바인딩되지 않는 확인란 (0) | 2020.12.13 |
PDF를 만드는 동안 마크 다운 페이지 나누기 (0) | 2020.12.13 |