Django自带的ORM如何执行group by(聚合查询)语句(求和、累积、平均)
使用Django的ORM建立了如下Model:
1 2 3 4 5 6 7 8 9 10 11 12 | class Book(models.Model): # 书籍名字 name = models.CharField(max_length = 300 ) # 书籍页数 pages = models.IntegerField() # 书籍价格 price = models.DecimalField(max_digits = 10 , decimal_places = 2 ) # 书籍作则 authors = models.CharField(max_length = 300 ) publisher = models.CharField(max_length300) # 发布日期 pub_date = models.DateField() |
现在想查询以字段authors分组,查出每个作者所著所有书的总页书,用SQL语句可以很容易的完成此任务:
1 2 3 | SELECT * , SUM (pages) AS total_pages FROM Book GROUP BY authors; |
那么如何用Django自带的ORM接口实现呢?
方法如下:
1 2 3 | from django.db.models import Sum result = Book.objects.values( "authors" ).annotate(total_pages = Sum ( "pages" )). all () |
计算每个作者一共写了多少本书籍代码示例:
1 2 3 | from django.db.models import Count result = Book.objects.values( "authors" ).annotate(total = Count( "name " )). all () |
计算书籍的平均价格代码示例:
1 2 3 | from django.db.models import Avg result = Book.objects.values( "authors" ).annotate(price = Avg( "price " )). all () |
参考文献:
http://www.chenxm.cc/post/465.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步