zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    github和bitbucket
    shell 删除文件下的* (copy).jpg备份文件
    linux 的iptables防火墙
    yum使用本地源
    linux的vnc- rdesktop远程登录windows桌面
    httpd/php/mysql的安装-1
    linux下的视频音频播放器终极解决方案
    linux读写ntfs
    示波器和三极管
    电子技术中的dB
  • 原文地址:https://www.cnblogs.com/tangpg/p/9018426.html
Copyright © 2011-2022 走看看