Django(9) 分组管理查询
分组管理查询
🌹分组管理查询标准🌹
在annotate()内写聚合函数
values在annotate()前,表示group by
values在annotate()后,表示取字段
filter在annotate()前,表示where条件
filter在annotate()后,表示having
例题:
1、查询出版社id大于1的出版社id以及书的平均价格
res=models.Bookz.objects.filter(publish_id__gt=1).values('publish_id').annotate(price_avg=Avg('price')).values('publish_id','price_avg')
print(res)
2、查询出版社id大于1的出版社并且出书平均价格大于30的
res=models.Bookz.objects.filter(publish_id__gt=1).values('publish_id').annotate(price_avg=Avg('price')).filter('price_avg__gt=30').values('price_id','price_avg')
print(res)
3、查询每个出版社书版的书籍的个数以及书版社的名字-->要注意的是联表的话最好用group by的表作为基表
res=models.Publishz.objects.vlaues('id').annotate(book_count=Count('bookz__id')).values('title','book_count')
🌼 第三题的简写版本。如果基表是group by的表的话可以不写分组的那个values,同样book_id也可以直接写成book,所以简写版本:
res=models.Publishz.objects.annotate(book_count=Count('bookz')).values('title','book_count')
4、查询出每个出版社的书籍的个数以及出版社的名字,以书为基表
res=models.Bookz.objects.values('publish__id').annotate(book_count=Count('id')).values('book_count','publish__title')
5、查询每一个作者的名字以及出版过的书籍的最高价格
res=models.Authorz.objects.values('id').annotate(price_max=Sum(bookz__price)).values('name','price_max')
6、查询每一个书籍的名称以及对应的作者个数
res=models.Bookz.objects.values('id').annotate(author_count=Count(Authors__id)).values('title','author_count')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!