Lin*_*Lin 9 django django-models
我有以下django模型(映射到表'A'):
class A(models.Model):
name = models.CharField(max_length=64, null=False)
value = models.IntegerField()
...
Run Code Online (Sandbox Code Playgroud)
我想在顶部执行以下简单查询:
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 ...
Run Code Online (Sandbox Code Playgroud)
我试图避免原始SQL - 如何使用django实现(在上面的例子中我使用avg,但同样的问题也与max,min,sum等相关)?
我尝试使用额外和聚合:
extra(select={'avg_field': case_when_query})
Run Code Online (Sandbox Code Playgroud)
和
aggregate(Avg('avg_field')),
Run Code Online (Sandbox Code Playgroud)
但是聚合函数仅适用于模型字段,因此此处不能使用额外字段.如何用django完成?
谢谢您的帮助
仍然可以使我们使用Django queryset的事情是这样的:
qs = A.objects.extra(select={"avg_field":
"avg(case when...)"}).filter(...).values("avg_field")
Run Code Online (Sandbox Code Playgroud)
要使用结果:
qs[0]["avg_field"]
Run Code Online (Sandbox Code Playgroud)
这将允许所需的功能。
| 归档时间: |
|
| 查看次数: |
10180 次 |
| 最近记录: |