Sql 在Django中计算满足谓词的行

Sql 在Django中计算满足谓词的行,sql,django,Sql,Django,在Django中,我有一个视图,其中我希望按非主键字段分组,然后为每个组计算满足谓词的行数。我试过的代码是 funding_requests=FRNs.objects.filter(spin=spin).extra( select={"approved": "committed_amount > 0", "denied": "committed_amount=0"} ).values("funding_year").annotate( request

在Django中,我有一个视图,其中我希望按非主键字段分组,然后为每个组计算满足谓词的行数。我试过的代码是

funding_requests=FRNs.objects.filter(spin=spin).extra(
    select={"approved": "committed_amount > 0",
            "denied": "committed_amount=0"}
).values("funding_year").annotate(
    requested=Sum('orig_commitment_request'), approved=Sum('committed_amount'),
    disbursed=Sum('total_authorized_disbursement'), num_requests=Count("funding_year"),
    num_approved=Sum('approved'), num_denied=Sum('denied')
)
但我收到错误消息“无法将关键字'denied'解析到字段中。”我也尝试了

funding_requests=FRNs.objects.filter(spin=spin).values("funding_year").annotate(
    requested=Sum('orig_commitment_request'), approved=Sum('committed_amount'),
    disbursed=Sum('total_authorized_disbursement'), num_requests=Count("funding_year")
).extra(
    select={"num_approved": "sum(committed_amount > 0)",
            "num_denied": "sum(committed_amount=0)"}
)

我没有收到错误,但是页面上显示为空白的
num_approved
num_denied
。是否有人知道如何获取满足每个分组的给定谓词的行数。

您可能不应该在
注释之前通过
值限制select语句的输出


您是否尝试过删除
.values(“funding_year”)
并在需要时将其包含在末尾?

这是django提供的新聚合类中最令人恼火的事情之一。不能使用添加了额外注释的字段(分组除外)。不幸的是,没有一个好的答案


我能提供的唯一答案几乎是使用一个原始查询并在python中连接结果

我在那里有一条语句,以便每年计算总和,就像在