首页 > 其他分享 >聚合查询 分组查询

聚合查询 分组查询

时间:2023-11-30 18:45:23浏览次数:33  
标签:__ count 聚合 models ret 查询 values 分组 id

###########1 聚合查询(聚合函数:最大,最小,和,平均,总个数)

from django.db.models import Avg,Max,Min,Count,Sum
#1 计算所有图书的平均价格
# aggregate结束,已经不是queryset对象了
# book=models.Book.objects.all().aggregate(Avg('price'))
# 起别名
# book=models.Book.objects.all().aggregate(avg=Avg('price'))
#2 计算总图书数
# book = models.Book.objects.all().aggregate(count=Count('id'))
# 3 计算最低价格的图书
# book = models.Book.objects.all().aggregate(min=Min('price'))
# 4 计算最大价格图书
# book = models.Book.objects.all().aggregate(max=Max('price'))
# print(book)

 

 

2 分组查询
'''
查询每一个部门名称以及对应的员工数
book:
id name price publish
1 金品 11.2 1
2 西游 14.2 2
3 东游 16.2 2
4 北邮 19.2 3

 

 '''
    # 示例一:查询每一个出版社id,以及出书平均价格
    # select publish_id,avg(price) from app01_book group by publish_id;
    # annotate


    #  annotate() 内写聚合函数
    #  values在前表示group by的字段
    #  values在后表示取某几个字段
    #  filter在前表示where
    #  filter在后表示having
    # from django.db.models import Avg, Count, Max, Min
    # ret=models.Book.objects.values('publish_id').annotate(avg=Avg('price')).values('publish_id','avg')
    # print(ret)

    # 查询出版社id大于1的出版社id,以及出书平均价格
    #select publish_id,avg(price) from app01_book where publish_id>1 group by publish_id;

    # ret=models.Book.objects.values('publish_id').filter(publish_id__gt=1).annotate(avg=Avg('price')).values('publish_id','avg')
    # print(ret)

    # 查询出版社id大于1的出版社id,以及出书平均价格大于30的
    # select publish_id,avg(price)as aaa from app01_book where publish_id>1 group by publish_id HAVING aaa>30;
    # ret = models.Book.objects.values('publish_id').filter(publish_id__gt=1).annotate(avg=Avg('price')).filter(avg__gt=30).values(
    #     'publish_id', 'avg')
    # print(ret)


    ## 查询每一个出版社出版的书籍个数
    # pk 代指主键

    # ret=models.Book.objects.get(pk=1)
    # print(ret.name)
    # ret=models.Publish.objects.values('pk').annotate(count=Count('book__id')).values('name','count')
    # print(ret)
    # 如果没有指定group by的字段,默认就用基表(Publish)主键字段作为group by的字段
    # ret=models.Publish.objects.annotate(count=Count('book__id')).values('name','count')
    # print(ret)

    # 另一种方式实现
    # ret=models.Book.objects.values('publish').annotate(count=Count('id')).values('publish__name','count')
    # print(ret)


    #查询每个作者的名字,以及出版过书籍的最高价格(建议使用分组的表作为基表)
    # 如果不用分组的表作为基表,数据不完整可能会出现问题
    # ret=models.Author.objects.values('pk').annotate(max=Max('book__price')).values('name','max')

    # ret = models.Author.objects.annotate(max=Max('book__price')).values('name', 'max')

    # ret= models.Book.objects.values('authors__id').annotate(max=Max('price')).values('authors__name','max')
    # print(ret)

    #查询每一个书籍的名称,以及对应的作者个数

    # ret=models.Book.objects.values('pk').annotate(count=Count('authors__id')).values('name','count')
    # ret=models.Book.objects.annotate(count=Count('authors__id')).values('name','count')

    # ret=models.Author.objects.values('book__id').annotate(count=Count('id')).values('book__name','count')
    #
    # print(ret)

    #统计不止一个作者的图书
    # ret=models.Book.objects.values('pk').annotate(count=Count('authors__id')).filter(count__gt=1).values('name','count')
    # ret = models.Author.objects.values('book__id').annotate(count=Count('id')).filter(count__gt=1).values('book__name', 'count')
    # print(ret)

    # 统计价格数大于10元,作者的图书
    ret = models.Book.objects.values('pk').filter(price__gt=10).annotate(count=Count('authors__id')).values('name',
                                                                                                           'count')
    print(ret)

    #统计价格数大于10元,作者个数大于1的图书
    ret = models.Book.objects.values('pk').filter(price__gt=10).annotate(count=Count('authors__id')).filter(count__gt=1).values('name',                                                                                                    'count')
    print(ret)

 

标签:__,count,聚合,models,ret,查询,values,分组,id
From: https://www.cnblogs.com/97zs/p/17868008.html

相关文章

  • F和Q查询
    F查询:取出数据库的某个字段的值#把read_num都加1fromdjango.db.modelsimportFret=models.Book.objects.all().update(read_num=F('read_num')+1)print(ret)#查询评论数大于阅读数的书籍ret=models.Book.objects.all().filter(commit_num__gt=F('read_num'))foriin......
  • clickhuose toStartOfInterval聚合的几种方式
    1.秒、分钟、小时、天以上这种sql可以用于上面几种类型的聚合。请注意时间SELECTtoStartOfInterval(timestamp,INTERVAL1minute)asstart_of_minute,count(*)ascountFROMtable_nameWHERE timestampBETWEEN'2023-10-3011:11:11'and'2023-11-3011:11......
  • 绕过cdn查询真实ip地址(概率性,不一定成功)
    背景通常网站站点加了cdn以后,一般无法解析到真实的ip地址,这时候想通过ip加端口的方式获取数据就不太可能,但是如果ngix代理禁止了ip访问,获取到真实ip也没用,会显示nginxforbidden,但是别的协议应该还是可以走,只是http的协议走不了如何查看网站是否加了cdn目标:http://alist.xiaoya......
  • 数仓实践丨常量标量子查询做全连接导致整体慢
    本文分享自华为云社区《GaussDB(DWS)性能调优:常量标量子查询做全连接导致整体慢》,作者:Zawami。问题描述由于SQL中存在标量子查询同另一查询做笛卡尔积使SQL整体慢。标量子查询,即结果集只有一行一列的子查询。这里导致的SQL语句执行慢不只是在于做笛卡尔积慢,也会使后续聚合更慢......
  • mysql慢查询日志
    一、开启并查看慢查询日志1、查看慢查询配置showvariableslike'%query%' 可以看到slow_query_log的值是OFF,也就是mysql默认是不启用慢查询日志的。这里还有个long_query_time,默认是10秒,也就是超过了10秒即为慢查询。log_queries_not_using_indexes,如果设置为ON,则会将所......
  • 基于对象的跨表查询(正向反向)
    #跨表查询有两种方式-基于对象的跨表查询:子查询  -基于双下划线的跨表查询:关联查询,连表查询    #基于对象的跨表查询-查询主键为1的书籍的出版社所在的城市    #基于对象的跨表查询(子查询)  #一对多  #查询主键为1的书籍的出......
  • 基于双下划线的跨表查询 进阶连续跨表查询
    基于双下划线的跨表查询:#连表查询#基于对象的跨表查询,先查对象,通过对象再去查另一个对象(正向:字段名,反向:表名小写/表名小写_set.all())#地址为山东的作者写的所有书#author_detail=models.AuthorDetail.objects.get(addr='山东')#author=author_detail.autho......
  • [LettCode-中等] 字母异位词分组
    这是一道中等难度题,首先我们来了解一下,什么是字母异位词 =》由重新排列源单词的所有字母得到一个新单词字母异位词=》它是这个意思,比如说一个字符串由3个字符abc组成,就是"abc",现在我把组成这个字符串的字母顺序随意调换,比如变成"bac","bca","cab"等,这几个词就是字母异位......
  • 记录一次MySQL多表查询,order by不走索引的情况.
    首先是表结构,部分字段脱敏已删除 CREATETABLE`log_device_heart`(`id`intunsignedNOTNULLAUTO_INCREMENT,`device_number`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNOTNULL,`time_periods_begin`datetimeNOTNULL,`time_peri......
  • PAN路径聚合网络
    PAN路径聚合网络目录PAN路径聚合网络FPN特征金字塔PAN网络模型结构自底向上网络动态特征池化bbox分支全连接融合模型总结其他特殊参考资料目标检测或者实例分割不仅要关心语义信息,还要关注图像的精确到像素点的浅层信息。所以需要对骨干网络中的网络层进行融合,使其同时具有深层......