• django-聚合操作


    聚合操作就是对数据库的数值类型操作的方法

    avg,sum,max,min,count

    select avg(age) from students  # 求年龄平均值

     django中的聚合操作

    1.aggregate:返回QuerySet对象 ,聚合操作的结果返回一个字典

    Table.object.all().aggregate(Count(字段))

    class ModelStudy(View):
        '''
        聚合操作只能在QuerySet对象操作
        Table.object.all(), Table.object.filter(age__gte=18) __gte大于等于18
        总之是多个数据的QuerySet集合
       aggregate(Max('age'),Min('age')) 多个聚合操作
    ''' def get(self, request): ''' QuerySet.aggregate(Sum("字段名")) ''' print Students.objects.all().aggregate(Max('age')) print Students.objects.aggregate(Max("age")) # 可简写 比对上面 等同 .all().aggregate print Students.objects.filter(age__gte=18).aggregate(Count("age")) # 大于等于 print Students.objects.filter(age__lt=18).aggregate(Max("age")) # 小于
        
         # Count可以去重统计 ,参数 distinct=True
         print Students.object.aggregate(Count("age", distinct=True)) # 返回结果为 {u'age_avg': 3} age_avg是默认的名字,可以自己指定名字 name=Count('age')
         print Students.object.aggregate(new_name=Count("age")) # {'new_name': 4} 
    return HttpResponse("ojbk")

     2.annotate 集合查询 。 可以做分组统计   

    Table.object.values('字段').annotate(Count('字段'))

    Table.object.values_list('字段').annotate(Count('字段'))

    annotate的聚合结果是针对每行数据,而不是整个查询结果

    class ModelStudy(View):
    
        def get(self, request):
            print Students.objects.values("age")
            print Students.objects.values("age").annotate(Count('age'))
            print Students.objects.values_list("age").annotate(Count('age'))
    
            return HttpResponse("ojbk")
    
    >>> <QuerySet [{u'age': 20L}, {u'age': 28L}, {u'age': 21L}, {u'age': 10L}, {u'age': 10L}]>
    >>> <QuerySet [{u'age': 20L, u'age__count': 1}, {u'age': 28L, u'age__count': 1}, {u'age': 21L, u'age__count': 1}, {u'age': 10L, u'age__count': 2}]>
    >>> <QuerySet [(20L, 1), (28L, 1), (21L, 1), (10L, 2)]>

    SQL语句:SELECT age,COUNT(age) FROM class_students GROUP BY age

  • 相关阅读:
    【译】Using .NET for Apache Spark to Analyze Log Data
    边缘缓存模式(Cache-Aside Pattern)
    GUID做主键真的合适吗
    在Java大环境下.NET程序员如何夺得一线生机
    板子
    P1525 关押罪犯 (并查集 / 二分图)| 二分图伪码
    算法学习笔记:匈牙利算法
    POJ
    19级暑假第三场训练赛
    POJ 1011 Sticks​ (DFS + 剪枝)
  • 原文地址:https://www.cnblogs.com/tangpg/p/9018426.html
Copyright © 2020-2023  润新知