• 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}]>
    
    
    
    
    
    
  • 相关阅读:
    不依赖OFFICE组件实现带图片的EXCEL导出
    关于安装SQL的错误
    Web开发学习点滴(持续更新)
    窗体间传值汇总
    沈阳.NET俱乐部MSN群开张了。。。
    VoIP协议标准浅析
    名词解释
    创建和运行一个解决方案
    400电话为什么叫免费电话?
    XPO基础简化的属性语法:
  • 原文地址:https://www.cnblogs.com/ludundun/p/11965807.html
Copyright © 2020-2023  润新知