Django对符合条件的值求和和分组求和(aggregate)

我的博客地址:https://tengxiaotao.top/blog/7

模型(models.py)
class VisitNumber(models.Model):
    count=models.IntegerField(verbose_name='网站访问总次数',default=0) #网站访问总次数
    class Meta:
        verbose_name = '网站访问总次数'
        verbose_name_plural = verbose_name
    def __str__(self):
        return str(self.count)
视图(views.py)

对某一列中的值进行求和

views.py

from django.db.models import Sum  # 引入

visitNumber = VisitNumber.objects.aggregate(nums=Sum('count'))
print(visitNumber['nums'])

对符合条件的数据进行求和

total=ImportData.objects.filter('列名'='值').aggregate(nums=Sum('count'))
print total['nums']

根据条件进行分组求和

 reg=ImportDta.object.values('列名').annotate(number=Sum("count"))
 #[{'product': u'E', 'number': 3637}, {'product': u'S', 'number': 19409}, {'product': u'C', 'number': 4829}, {'product': u'N', 'number': 846}]

参考链接:https://docs.djangoproject.com/en/2.1/topics/db/aggregation/

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Django 的聚合函数 `Sum` 和 `ExtractMonth` 来实现根据月份对数据求和的功能。 假如你有一个模型叫 `MyModel`,其中有一个 `month` 字段表示月份,还有一个 `value` 字段表示,你可以按如下方式对 `value` 字段进行求和: ```python from django.db.models import Sum from django.db.models.functions import ExtractMonth # 假设你要查询2021年1月的总和 total_value = MyModel.objects.filter(month__year=2021, month__month=1).aggregate(Sum('value')) ``` 这里使用了 `filter` 方法来过滤出符合条件的数据,`aggregate` 方法来对 `value` 进行求和。同时使用了 `ExtractMonth` 函数来从 `month` 字段中提取月份信息,并且通过 `year` 和 `month` 参数指定了查询的年份和月份。 如果你需要对多个月份的数据进行求和,可以使用 `annotate` 方法来分组计算: ```python from django.db.models import Sum from django.db.models.functions import ExtractMonth # 假设你要查询2021年1月至3月的总和 total_values = MyModel.objects.filter(month__year=2021, month__month__in=[1, 2, 3]).annotate(month=ExtractMonth('month')).values('month').annotate(total_value=Sum('value')).order_by('month') ``` 这里使用了 `filter` 方法来过滤出符合条件的数据,然后使用 `annotate` 方法来分组计算每个月份的总和。同时使用了 `ExtractMonth` 函数来从 `month` 字段中提取月份信息,并且通过 `year` 和 `month__in` 参数指定了查询的年份和月份范围。最后使用 `values` 方法来指定需要查询的字段,然后使用 `order_by` 方法按月份排序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值