zoukankan      html  css  js  c++  java
  • django基础之day04,聚合查询和分组查询

    
    聚合查询:
            聚合函数必须用在分组之后,没有分组其实默认整体就是一组
            Max Min Sum Avg Count
    
            1.分组的关键字是:aggretate
            2.导入模块
                from django.db.models import Max Min Sum Avg Count
                温馨提示:只要跟数据库相关的功能,基本上都在django.db.models里面
                如果不在,可能直接在django.db里面
    
        1.筛选出价格最高的书籍
            #聚合函数
        from django.db.models import Max,Min,Sum,Count,Avg
        #注意事项,聚合函数Max,Min,Sum,Count,Avg的首字母要大写,不然会报错
    
    
        #1.筛选出价格最高的书籍
        # res=models.Books.objects.aggregate(mr=Max('price'))
        # print(res)
        #结果:{'mr': Decimal('888.00')}
    
    
        #2.求书籍总价格
        # res=models.Books.objects.aggregate(sm=Sum('price'))
        # print(res)
        #结果:{'sm': Decimal('2442.00')}
    
    
        # 3.求书籍的平均价格
        # res=models.Books.objects.aggregate(av=Avg('price'))
        # print(res)
        #结果:{'av': 610.5}
    
    
        #4.一起使用
        # res=models.Books.objects.aggregate(Max('price'),Sum('price'),Count('price'),Avg('price'))
        # print(res)
        #结果:{'price__max': Decimal('888.00'), 'price__sum': Decimal('2442.00'), 'price__count': 4, 'price__avg': 610.5}
    
    
    
    
     分组查询:
    
            什么时候需要分组
                1.统计每一个部门的平均薪资
                2.统计每一个部门的男女比例
    
            1.关键字:annotate
            2.导入模块
                  from django.db.models import Max Min Sum Avg Count
    
            django中models后面点什么,就按照什么分组
    
    
    
    
        #1.统计每一本书的作者个数,书名,和对应的作者人数
        # res=models.Book.objects.annotate(author_num=Count('authors__id')).values('title','author_num')
        # print(res)
        #结果:<QuerySet [{'title': '三国演义', 'author_num': 0}, {'title': '红楼梦', 'author_num': 2}, {'title': '水浒传', 'author_num': 0}, {'title': '西游记', 'author_num': 2}]>
    
    
        #2.统计每个出版社卖的最便宜的书的价格,出版社的名字,出版的最便宜的书
        # res=models.Publish.objects.annotate(min_price=Min('book__price')).values('name','min_price')
        # print(res)
        #结果:<QuerySet [{'name': '东方出版社', 'min_price': Decimal('222.33')}, {'name': '北方出版社', 'min_price': Decimal('333.00')}]>
    
    
    
    
        #3.统计不止一个作者的图书
        #分析步骤:
            #1.先拿书和对应的作者数
            #2.再筛选出作者数量大于1的图书,书名和作者数目
        # res=models.Book.objects.annotate(author_num=Count('authors')).filter(author_num__gt=1).values('title','author_num')
        # print(res)
        #结果:<QuerySet [{'title': '红楼梦', 'author_num': 2}, {'title': '西游记', 'author_num': 2}]>
    
    
    
        #4.查询各个作者出的书的总价格,作者名字,总价格
        # res=models.Author.objects.annotate(sum_price=Sum('book__price')).values('name','sum_price')
        # print(res)
        #结果:<QuerySet [{'name': 'jason', 'sum_price': Decimal('777.33')}, {'name': 'oscar', 'sum_price': Decimal('444.33')}, {'name': 'egon', 'sum_price': Decimal('333.00')}, {'name': 'dundun', 'sum_price': None}]>
    
    
    
    
    
    
  • 相关阅读:
    计算机科学中最重要的32个算法
    趣事
    深度学习迷你地图
    物理学
    代数几何
    Node.js 文件系统
    Node.js 常用工具util包
    Node.js 全局对象
    favi.icon是什么?
    Node.js 路由
  • 原文地址:https://www.cnblogs.com/ludundun/p/11965807.html
Copyright © 2011-2022 走看看