खोज…


परिचय

एकत्रीकरण एक मॉडल से प्राप्त वस्तुओं की पंक्तियों पर (व्यक्तिगत और / या) समूहों के संचालन की अनुमति देने वाली विधियां हैं।

औसत, न्यूनतम, अधिकतम, क्वेरी से योग

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 }

सभी उत्पादों की कीमतों का SUM पाने के लिए:

>>> 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'))

आप क्वेरी में एनोटेट फ़ील्ड का उपयोग कर सकते हैं:

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

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

GROUB BY ... COUNT / SUM Django ORM समतुल्य

हम एक GROUP BY ... COUNT या एक GROUP BY ... SUM प्रदर्शन कर सकते हैं GROUP BY ... COUNT annotate() , values() , django.db.models order_by() और django.db.models की Count के उपयोग के साथ Django ORM पर 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 में दो कॉलम के साथ एक क्वेरीसेट शामिल है: author और count :

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

GROUB BY ... SUM :

  • मान लें कि हम अपनी Books तालिका में मौजूद प्रत्येक लेखक की सभी पुस्तकों की कीमत का योग करना चाहते हैं:

     result = Books.objects.values('author')
                           .order_by('author')
                           .annotate(total_price=Sum('price'))
    
  • अब result में दो कॉलम के साथ एक total_price : author और total_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