zoukankan      html  css  js  c++  java
  • 07.aggregate和annotate

    01.aggregate聚合函数

    • **作用:**从数据库中取出一个汇总的集合
    • aggregate求最大值、最小值、平局值等
    from django.db.models import Count,Avg,Max,Sum
    def orm(request):
    
        stus = models.Student.objects.aggregate(
            stu_num=Count('age'),     #计算学生表中有多少条age条目
            stu_avg=Avg('age'),       #计算学生的平均年纪
            stu_max=Max('age'),       #找到年纪最大的学生
            stu_sum=Sum('age'))       #将表中的所有年纪相加
    
        print('stu',stus)
        return HttpResponse('ok')
    #运行结果:{'stu_sum': 69, 'stu_max': 24, 'stu_avg': 23.0, 'stu_num': 3}

    02.annotate实现聚合group by查询

    • **作用:**对查询结果进行分组,比如分组求出各年龄段的人数
    • 注: annotate后面加filter过滤相当于原生sql语句中的having
    from django.db.models import Count, Avg, Max, Min, Sum
    def orm(request):
        #1 按年纪分组查找学生表中各个年龄段学生人数:(22岁两人,24岁一人)
        # 查询结果:[{'stu_num': 2, 'age': 22}, {'stu_num': 1, 'age': 24}]
    
        stus1 = models.Student.objects.values('age').annotate(stu_num=Count('age'))
    
        #2 按年纪分组查找学生表中各个年龄段学生人数,并过滤出年纪大于22的:
        # 查询结果:[{'stu_num': 1, 'age': 24}] (年级大于22岁的仅一人,年级为24岁)
    
        stus2 = models.Student.objects.values('age').annotate(stu_num=Count('age')).filter(age__gt=22)
    
        #3 先按年纪分组,然后查询出各个年龄段学生的平均成绩
        # 查询结果:[{'stu_Avg': 86.5, 'age': 22}, {'stu_Avg': 99.0, 'age': 24}]
        # 22岁平均成绩:86.5      24岁平均成绩:99
    
        stus3 = models.Student.objects.values('age').annotate(stu_Avg=Avg('grade'))
    
        return HttpResponse('ok')

    03.aggregate和annotate区别

    • Aggregate作用是从数据库取出一个汇总的数据(比如,数量,最大,最小,平均等)
    • 而annotate是先按照设定的条件对数据进行分组,然后根据不同组分别对数据进行汇总
  • 相关阅读:
    java反射机制
    java的hashmap与hashtable说明,简单易理解
    awk
    python的w+到底是什么
    hive深入浅出
    【OpenCV新手教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)
    对你相同重要的非技术贴,10件事证明你跟错了人
    SVM中为何间隔边界的值为正负1
    pushlet服务端推送——多播
    谁洗碗,搭载我的技术目标,起航。
  • 原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14789091.html
Copyright © 2011-2022 走看看