在django中注释group by
我尝试在django中执行一个查询,该查询相当于:在django中注释group by,django,group-by,django-annotate,Django,Group By,Django Annotate,我尝试在django中执行一个查询,该查询相当于: SELECT SUM(quantity * price) from Sales GROUP BY date. 我的django查询如下所示: Sales.objects.values('date').annotate(total_sum=Sum('price * quantity')) 上面的一个抛出错误: 无法将关键字“价格*数量”解析为字段 然后,在检查完这个之后,我提出了另一个问题 不幸的是,这对我帮助不大。它给我提供了按日期分组的S
SELECT SUM(quantity * price) from Sales GROUP BY date.
我的django查询如下所示:
Sales.objects.values('date').annotate(total_sum=Sum('price * quantity'))
上面的一个抛出错误:
无法将关键字“价格*数量”解析为字段
然后,在检查完这个之后,我提出了另一个问题
不幸的是,这对我帮助不大。它给我提供了按日期分组的SUM(price)
,而不是按日期分组的SUM(quantity*price)
如何在django中查询此信息?您应该使用它对字段执行操作:
from django.db.models import F
Sales.objects.values('date').annotate(total_sum=Sum(F('price') * F('quantity')))
编辑:假设价格
是一个分码字段
,数量
是一个整数字段
(不同类型),您需要在总和
中指定输出字段
:
from django.db.models import DecimalField, F
Sales.objects.values('date').annotate(total_sum=Sum(F('price') * F('quantity'), output_field=DecimalField()))
在我的例子中,我必须添加输出字段:Sales.objects.values('date')。注释(total_sum=sum(F('price')*F('quantity'),output_field=FloatField())。这将返回空查询集。@MaruthiEranki认为您的字段类型是经过编辑的。对此深表歉意。我将输出字段设置为FloatField。现在的问题是,django查询并没有返回任何查询集。虽然我有数据。@MaruthiEranki您确定使用了正确的变量等吗。?或者使用适当的数据库?尝试直接打印查询集:
print(Sales.objects.values('date')。annotate(…)
Yes,如果我做Sum(F('price')),那么它将返回集合。只有当我乘以F('price')*F('quantity')时,它才返回空集。我不知道到底是什么问题。
from django.db.models import DecimalField, F
Sales.objects.values('date').annotate(total_sum=Sum(F('price') * F('quantity'), output_field=DecimalField()))