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

Django带条件求和查询实现咨询:转换MySQL条件求和语句

解决Django ORM实现带条件的Sum统计问题

嘿,我明白你的需求了!要把你那个MySQL查询转成Django ORM,关键是要学会用Case和When表达式来实现条件求和——这正是你之前卡住的地方,因为直接用Sum没法直接加等于判断。

具体实现步骤

首先,你需要导入Django ORM的几个核心表达式:

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

然后,就可以写出对应的ORM查询了:

result = Rating.objects.filter(applied_users=32500).aggregate(
    YES=Sum(
        Case(
            When(recommended='1', then=1),
            default=0,
            output_field=IntegerField()
        )
    ),
    NO=Sum(
        Case(
            When(recommended='0', then=1),
            default=0,
            output_field=IntegerField()
        )
    )
)

代码解释

  • Case + When组合相当于SQL里的条件判断:当recommended等于'1'时返回1,否则返回0;
  • Sum会把这些1和0加起来,本质上就是统计符合recommended='1'的记录总数,和你原来的sum(recommended='1')效果完全一致;
  • output_field=IntegerField()是为了明确指定返回值类型,避免Django自动推断可能出现的问题;
  • 最终result会是一个字典,比如{'YES': 15, 'NO': 8},和你MySQL查询返回的结果结构对应。

额外提示

如果你的recommended字段在Django模型里是BooleanField(对应MySQL的tinyint类型),可以简化成:

YES=Sum(Case(When(recommended=True, then=1), default=0, output_field=IntegerField()))

这样就完美实现你要的统计效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:00:33