gpt4 book ai didi

Django 查询 - "case when"与聚合函数

转载 作者:行者123 更新时间:2023-12-02 02:10:51 26 4
gpt4 key购买 nike

我有以下 django 模型(映射到表“A”):

class A(models.Model):
name = models.CharField(max_length=64, null=False)
value = models.IntegerField()
...

我想在顶部执行以下简单查询:

select avg(case 
when (value > 0 and value <= 50) then 0
when (value > 50 and value < 70) then 50
else 100 end)
from A
where ...

我试图避免原始 SQL - 如何用 django 实现这一点(在上面的示例中我使用 avg,但同样的问题也与 max、min、sum 等相关)?

我尝试使用额外和聚合:

extra(select={'avg_field': case_when_query})

aggregate(Avg('avg_field')), 

但聚合函数仅适用于模型字段,因此此处无法使用额外的字段。这如何用 django 来完成?

感谢您的帮助

最佳答案

仍然允许我们使用 django 查询集的方法如下:

qs = A.objects.extra(select={"avg_field": 
"avg(case when...)"}).filter(...).values("avg_field")

使用结果:

qs[0]["avg_field"]

这将允许所需的功能。

关于Django 查询 - "case when"与聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3799125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com