Django 聚合查询

聚合查询是做数据分析的数据库基础。通常使用聚合函数完成聚合查询:
Mysql聚类函数
Count 计数
Sum 求和
Avg 求平均数
Max最大
Min最小
django也有相似的操作,通常django和聚类查询和order_by,group_by
在django当中排序查询是order_by
分组查询是annotate,分组查询通常写在查询的尾部。
Django聚类查询的例子
在这里插入图片描述
Django使用聚类方法,需要通过aggregate方法

def  cart(request):#购物车页面
    user_id=request.COOKIES.get("user_id")
    goods_list=Cart.objects.filter(user_id=user_id).order_by("-id")
    if request.method=="POST":#cart页提交订单
        post_data=request.POST
        cart_data=[]#收集前端传递过来的商品
        cart_ids=[]
        for k,v in post_data.items():
            if k.startswith("goods_"):#判断传过来的订单id
                print(v,"v",k,"k")
                cart_data.append(Cart.objects.get(id=int(v)))
                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中,聚合查询是指对模型数据进行统计、分组、排序等操作的查询。而 annotate() 是聚合查询中的一个常用方法,它可以在查询结果中添加一个聚合函数的值,并将该值作为一个新的属性添加到查询结果的每个对象中。 annotate() 方法的参数可以是一个聚合函数,也可以是一个表达式。聚合函数包括:Count、Avg、Sum、Max、Min 等,而表达式则是由模型中的字段和操作符组成的一个字符串。 以下是一些例子: ```python from django.db.models import Count from .models import Book, Author # 统计每个作者的书籍数量 authors = Author.objects.annotate(num_books=Count('book')) # 统计每个作者的平均书籍价格 authors = Author.objects.annotate(avg_price=Avg('book__price')) # 统计每个作者的最高书籍价格 authors = Author.objects.annotate(max_price=Max('book__price')) # 统计每个作者的书籍总价值 authors = Author.objects.annotate(total_price=Sum('book__price')) # 统计每个作者的书籍数量,并将结果按照数量从多到少排序 authors = Author.objects.annotate(num_books=Count('book')).order_by('-num_books') ``` 在上面的例子中,annotate() 方法的参数都是一个字符串,它们表示不同的聚合函数或表达式。其中,`'book'` 表示一个外键,它指向 Book 模型;`'book__price'` 表示一个跨表查询,它找到与 Book 关联的 Price 字段。 所以在使用 annotate() 的时候,需要根据具体的需求来设置参数,将其设置为合适的聚合函数或表达式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值