You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django中实现分组求和、按总和排序并拆分类型统计

Django分组统计实现方案

需求说明

按name字段分组,计算每组的qty总和(命名为sum_qty),同时统计每组内类型A、B、C各自的qty总和,最终按sum_qty排序。

实现代码

from django.db.models import Sum, Case, When, IntegerField

# 执行查询并统计
query_result = TheModel.objects.values('name') \
    .annotate(
        sum_qty=Sum('qty'),
        type_a=Sum(Case(
            When(type='A', then='qty'),
            default=0,
            output_field=IntegerField()
        )),
        type_b=Sum(Case(
            When(type='B', then='qty'),
            default=0,
            output_field=IntegerField()
        )),
        type_c=Sum(Case(
            When(type='C', then='qty'),
            default=0,
            output_field=IntegerField()
        ))
    ) \
    .order_by('-sum_qty')  # 降序排序,升序则改为 order_by('sum_qty')

代码解释

  • values('name'):指定按name字段进行分组
  • annotate():添加聚合统计字段:
    • sum_qty=Sum('qty'):直接计算每组的qty总合
    • 各类型的统计使用Case/When条件判断,匹配对应type时取对应qty值,否则取0,再通过Sum聚合得到该类型的总合
  • order_by('-sum_qty'):按sum_qty降序排列结果,若需要升序去掉负号即可

测试结果验证

针对给出的5条测试数据,执行上述代码后得到的结果如下(降序):

namesum_qtytype_atype_btype_c
name2155010
name110334

内容的提问来源于stack exchange,提问作者Mas Zero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:45:34