How to execute a GROUP BY … COUNT or SUM in Django ORM?

可紊 提交于 2019-11-27 21:43:02
John Moutafis

We can perform a GROUP BY ... COUNT or a GROUP BY ... SUM SQL equivalent queries on Django ORM, with the use of annotate(), values(), the django.db.models's Count and Sum methods respectfully and optionally the order_by() method:

  • GROUP BY ... COUNT:

    from django.db.models import Count
    
    result = Books.objects.values('author')
                          .order_by('author')
                          .annotate(count=Count('author'))
    

    Now result contains a dictionary with two keys: author and count:

      author    | count
    ------------|-------
     OneAuthor  |   5
    OtherAuthor |   2
       ...      |  ...
    
  • GROUP BY ... SUM:

    from django.db.models import Sum
    
     result = Books.objects.values('author')
                           .order_by('author')
                           .annotate(total_price=Sum('price'))
    

    Now result contains a dictionary with two columns: author and total_price:

      author    | total_price
    ------------|-------------
     OneAuthor  |    100.35
    OtherAuthor |     50.00
        ...     |      ...
    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!