Django按不同标准计算记录

时间:2016-03-02 13:14:46

标签: django django-queryset

Django 1.8 +,Python 3.4 +

我想对某组记录执行查询,按不同的标准对它们进行计数。

实际的SQL查询我的目标是实现:

select count(*),
       sum(case when type=1 then 1 else 0 end),
       sum(case when total > 1000 then 1 else 0 end)
  from mytable
 where conditions

是否可以在django中定义此查询,还是必须进行多次.filter().count()来电?

1 个答案:

答案 0 :(得分:1)

感谢ilse2005,我设法深入了解文档。

匹配我所需查询的QuerySet如下:

MyTable.objects.aggregate(
    total=Count('id'),
    responses=Sum(Case(When(type=1, then=1), default=0, output_field=IntegerField())),
    big_ones=Sum(Case(When(total__gt=1000, then=1), default=0, output_field=IntegerField()))
)