django 中的聚合函数,分组函数,F 查询,Q查询
先以mysql的语句,聚合用在分组里,
对mysql中groupby是分组
每什么的时候就要分组,如每个小组,就按小组分,
groupby字段having聚合函数
#举例:求班里的平均成绩,selectAvg(score)fromstu
在django中
聚合是aggreate(*args,**kwargs),通过QuerySet进行计算。做求值运算的时候使用
分组是annotate(*args,**kwargs),括号里是条件,遇到每什么的时候就要分组,
先从models导入要用到的函数
fromdjango.db.modelsimportMin,Avg,Max,Sum
defaggregate(request):
#求所有书籍的平均价格
ret11=Book.objects.all().aggregate(Avg("price"))
#print(ret11)#{'price__avg':51.975}
#求所有书籍的最高价
ret12=Book.objects.all().aggregate(MaxPrice=Max('price'))
#print(ret12)#{'MaxPrice':Decimal('100.00')}
#egon出版过书籍的最高价格
p=Book.objects.filter(authors__name='egon').aggregate(Max('price'))
print(p)#{'price__max':Decimal('100.00')}
#分组annotate()
#每一个作者出版过的书的最高价,
#解析,按照作者的名字分组,就要用到values,显示的是字段的名字,
b1=Book.objects.values('authors__name').annotate(Max('price'))
print(b1)
##四个作者都关联了同一本书,而这本书又是最高价
#每个出版社出版的最低价格的书籍
b2=Book.objects.values('publish__name').annotate(Min('price'))
print(b2)
#
FQ查询
F,主要是做查询
Q查询可以做组合条件的查询&是与,|(管道符)或,~非
defFAndQ(request):
#给每本书涨价10元,
#用sql语句写updatebooksetprice=price+10
#F,主要是做查询
#Book.objects.all().update(price=F('price')+10)
#查询书籍是富开头,并且价格大于30的书籍,逗号可以做与的关系查询
b4=Book.objects.filter(title__startswith="富",price__gt=30)
#print(b4)#]>
#Q查询可以做组合条件的查询&是与,|(管道符)或,~非
##查询书籍是富开头,或价格大于30的书籍
b5=Book.objects.filter(Q(title__startswith="富")|Q(price__gt=60))
#print(b5)
#,,,]>
#组合查询,以富开头,价格大于60,或者id大于5的书籍
b6=Book.objects.filter(Q(title__startswith="富")&Q(price__gt=60)|Q(id__gt=5))
#print(b6)#]>
#
#查询条件如果不加Q,就要放到最后面,
b7=Book.objects.filter(Q(price__gt=60)|Q(id__gt=5),title__startswith="富")
#print(b7)
#~取反的意思
b8=Book.objects.filter(Q(title__startswith="富")&~Q(price__gt=60)|Q(id__gt=5))
print(b8)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。