Python全系列 教程
3567个小节阅读:5930k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
xxxxxxxxxx
class Cook(models.Model):
"""
厨师
"""
name = models.CharField(max_length=32,verbose_name='厨师名')
level = models.IntegerField(verbose_name='厨艺等级')
age = models.IntegerField(verbose_name='年龄')
sect = models.CharField(max_length=32,verbose_name='厨艺派系')
class Meta:
db_table='t_cook'
xxxxxxxxxx
insert into t_cook (name,level,age,sect) values ("黑暗之女",6,20,"川菜");
insert into t_cook (name,level,age,sect) values ("狂战士",5,24,"粤菜");
insert into t_cook (name,level,age,sect) values ("卡牌大师",6,25,"川菜");
insert into t_cook (name,level,age,sect) values ("德邦总管",6,26,"鲁菜");
insert into t_cook (name,level,age,sect) values ("无畏战车",3,24,"湘菜");
insert into t_cook (name,level,age,sect) values ("诡术妖姬",6,22,"川菜");
insert into t_cook (name,level,age,sect) values ("猩红收割者",2,21,"鲁菜");
insert into t_cook (name,level,age,sect) values ("远古恐惧",4,20,"湘菜");
insert into t_cook (name,level,age,sect) values ("正义天使",6,21,"川菜");
insert into t_cook (name,level,age,sect) values ("无极剑圣",2,20,"粤菜");
insert into t_cook (name,level,age,sect) values ("牛头酋长",6,25,"湘菜");
insert into t_cook (name,level,age,sect) values ("符文法师",1,26,"川菜");
insert into t_cook (name,level,age,sect) values ("亡灵战神",6,30,"鲁菜");
insert into t_cook (name,level,age,sect) values ("战争女神",1,18,"川菜");
insert into t_cook (name,level,age,sect) values ("众星之子",6,20,"湘菜");
insert into t_cook (name,level,age,sect) values ("迅捷斥候",6,20,"川菜");
insert into t_cook (name,level,age,sect) values ("麦林炮手",6,15,"粤菜");
insert into t_cook (name,level,age,sect) values ("祖安怒兽",2,29,"粤菜");
insert into t_cook (name,level,age,sect) values ("赏金猎人",6,22,"川菜");
insert into t_cook (name,level,age,sect) values ("寒冰射手",4,18,"鲁菜");
对数据表计算统计值,需要使用 aggregate 方法,提供的参数可以是一个或者多个聚合函数,aggregate 是 QuerySet 的一个子句,它的返回值是一个字典类型
常用的聚合函数有:Avg、Count、Max、Min、Sum
xxxxxxxxxx
# Max 找出最大的
from django.db.models import Max
Cook.objects.aggregate(Max('age'))
# 结果是一个字典 {'age__max': 30}
# 可以使用 max=Max('age') 指定 别名为 max,而不使用 age__max
Cook.objects.aggregate(max=Max('age'))
# 多个聚合函数一起使用
Cook.objects.aggregate(Max('age'), Min('age'), Avg('age'))
使用annotate()函数实现分组查询,得配合其他函数:
xxxxxxxxxx
# 基本应用
# 以 group_id 分组,找出level的最大值,最小值,和平均值
Cook.objects.values('sect').annotate(max=Max('level'), min=Min('level'), avg=Avg('level'))
# 以 group_id 分组 并且 group_id 大于 2 ,找出level的最大值,最小值,和平均值
Cook.objects.values('sect').annotate(max=Max('level'), min=Min('level'), avg=Avg('level')).filter(sect='鲁菜')
# 和下面这句等效
# 推荐使用下面这种方式
Cook.objects.filter(sect='鲁菜').values('sect').annotate(max=Max('level'), min=Min('level'), avg=Avg('level'))
实时效果反馈
1. 关于Django模型, 聚合与分组查询数据说法错误的是?
A 聚合查询可以使用aggregate()函数
B 分组聚合查询可以通过values()指定字段分组,annotate()聚合查询
C 聚合函数可以在django.db.models
中引入
D 聚合查询的值只可以一个一个查询
答案
1=>D