Commit 64229eb3 authored by Adrian Holovaty's avatar Adrian Holovaty
Browse files

Started a 'Cheat sheet' section in aggregation docs because I desperately need this

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17371 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 4c16e772
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -41,6 +41,42 @@ used to track the inventory for a series of online bookstores:
       name = models.CharField(max_length=300)
       books = models.ManyToManyField(Book)

Cheat sheet
===========

In a hurry? Here's how to do common aggregate queries, assuming the models above::

    # Total number of books.
    >>> Book.objects.count()
    2452

    # Total number of books with publisher=BaloneyPress
    >>> Book.objects.filter(publisher__name='BaloneyPress').count()
    73

    # Average price across all books.
    >>> from django.db.models import Avg
    >>> Book.objects.all().aggregate(Avg('price'))
    {'price__avg': 34.35}

    # Max price across all books.
    >>> from django.db.models import Max
    >>> Book.objects.all().aggregate(Max('price'))
    {'price__max': Decimal('81.20')}

    # Each publisher, each with a count of books as a "num_books" attribute.
    >>> from django.db.models import Count
    >>> pubs = Publisher.objects.annotate(num_books=Count('book'))
    >>> pubs
    [<Publisher BaloneyPress>, <Publisher SalamiPress>, ...]
    >>> pubs[0].num_books
    73

    # The top 5 publishers, in order by number of books.
    >>> from django.db.models import Count
    >>> pubs = Publisher.objects.annotate(num_books=Count('book')).order_by('-num_books')[:5]
    >>> pubs[0].num_books
    1323

Generating aggregates over a QuerySet
=====================================