수색…


소개

집계는 모델에서 파생 된 객체 행 (개별 및 / 또는 그룹의 행)에 대한 작업 실행을 허용하는 메소드입니다.

Queryset에서 평균, 최소, 최대, 합계

class Product(models.Model):
    name = models.CharField(max_length=20)
    price = models.FloatField()

모든 제품의 평균 가격을 얻으려면 :

>>> from django.db.models import Avg, Max, Min, Sum
>>> Product.objects.all().aggregate(Avg('price'))
# {'price__avg': 124.0}

모든 제품의 최저 가격을 얻으려면 :

>>> Product.objects.all().aggregate(Min('price'))
# {'price__min': 9}

모든 제품의 최대 가격을 얻으려면 :

>>> Product.objects.all().aggregate(Max('price'))
# {'price__max':599 }

모든 제품의 가격 합계를 얻는 방법 :

>>> Product.objects.all().aggregate(Sum('price'))
# {'price__sum':92456 }

외교 관계 수를 센다.

class Category(models.Model):
    name = models.CharField(max_length=20)


class Product(models.Model):
    name = models.CharField(max_length=64)
    category = models.ForeignKey(Category, on_delete=models.PROTECT)

각 카테고리의 번호 제품을 얻으려면 다음과 같이하십시오.

>>> categories = Category.objects.annotate(Count('product'))

반환 된 각 인스턴스에 <field_name>__count 속성이 추가됩니다.

>>> categories.values_list('name', 'product__count')
[('Clothing', 42), ('Footwear', 12), ...]

키워드 인수를 사용하여 속성에 대한 사용자 정의 이름을 제공 할 수 있습니다.

>>> categories = Category.objects.annotate(num_products=Count('product'))

Querysets에서 주석 필드를 사용할 수 있습니다.

>>> categories.order_by('num_products')
[<Category: Footwear>, <Category: Clothing>]

>>> categories.filter(num_products__gt=20)
[<Category: Clothing>]

GROUB BY ... COUNT / SUM Django ORM 해당 항목

우리는 annotate() , values() , order_by()django.db.modelsCount 사용하여 Django ORM에서 GROUP BY ... COUNT 또는 GROUP BY ... SUM SQL 해당 쿼리를 수행 할 수 있습니다 정중하게 Sum 방법 :

우리 모델을 다음과 같이하자.

   class Books(models.Model):
       title  = models.CharField()
       author = models.CharField()
       price = models.FloatField()

GROUP BY ... COUNT :

  • 각기 다른 저자 당 몇 개의 도서 개체가 Books 테이블에 존재하는지 계산하려고한다고 가정합니다.

    result = Books.objects.values('author')
                          .order_by('author')
                          .annotate(count=Count('author'))
    
  • 이제 result 에는 authorcount 라는 두 개의 열이 포함 된 쿼리 세트가 포함됩니다.

      author    | count
    ------------|-------
     OneAuthor  |   5
    OtherAuthor |   2
       ...      |  ...
    

GROUB BY ... SUM :

  • Google Books 표에있는 고유 한 저자마다 모든 도서의 가격을 합산한다고 가정합니다.

     result = Books.objects.values('author')
                           .order_by('author')
                           .annotate(total_price=Sum('price'))
    
  • 이제 result 에는 authortotal_price 라는 두 개의 열이있는 쿼리 세트가 포함됩니다.

      author    | total_price
    ------------|-------------
     OneAuthor  |    100.35
    OtherAuthor |     50.00
        ...     |      ...
    


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow