【问题标题】:django count a field but group by anotherdjango 计算一个字段,但按另一个分组
【发布时间】:2015-07-23 01:41:06
【问题描述】:

所以我将 django 与 mysql 一起使用,并且我有一个模型 MyModel,其中包含 region 字段上带有 None 的一些项目。当我运行这个时:

results = MyModel.objects.all()\
        .values('region')\
        .annotate(total=Count('region'))

它返回分组正确,但一个是{'None': 0},这是不正确的,因为有些项目的region字段等于None。

现在,如果我使用的是 mysql,那么我可以将其分组:

select region, count(id) from model_table group by region;

返回我想要的解决方案| NULL | 5 |。

如何从 django 实现这一点?

【问题讨论】:

    标签: python mysql sql django


    【解决方案1】:

    您实际上已经在问题中写下了答案。据我所知,SQL 中的 COUNT 排除了某些虚假值,如 NULL。因此,如果您还想计算错误值,您可以使用另一个字段来执行聚合,就像您在 SQL 语句中使用“id”字段时所做的那样。关于这一点,您需要做的就是对“id”执行 COUNT。把你的代码改成这样:

    results = MyModel.objects.all()\
        .values('region')\
        .annotate(total=Count('id'))
    

    【讨论】:

    • omg,你完全正确,我不认为这是要走的路,但是是的,就是这么简单。谢谢。
    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多