使用 .extra 进行 Django 查询
Make Django query with .extra
我的目标是创建一个查询来计算我的字段的绝对值并计算它们的平均值。我已经阅读了它,并且开始在 Django 中使用 .extra
可能性,但我无法实现我的目标。我也将我的尝试附加到所需的 SQl 查询中。提前谢谢你。
期望的结果将等于此 PosreSql 查询的结果:
SELECT
time_stamp,
AVG(ABS(ddt))
FROM tropo
WHERE time_stamp BETWEEN '2018-01-16 8:00' AND '2018-01-17 8:00'
GROUP BY time_stamp
我的尝试是在 Django 中:
Table.objects.all().filter(time_stamp__range=(2018-01-16 8:00, 2018-01-17 8:00))
.extra(select={"field_abs": "abs(field)"})
.values('time_stamp')
.annotate(avg_field=Avg('field_abs'))
我怎样才能使我的 Djanogo 查询有效?
我不认为你真的需要额外的查询,试试这个:
from django.db.models import Func, Avg
tables = Table.objects.filter(time_stamp__range=(2018-01-16 8:00, 2018-01-17 8:00))
tables = tables.values('time_stamp').annotate(avg_field=Avg(Func('field', function='ABS')))
我的目标是创建一个查询来计算我的字段的绝对值并计算它们的平均值。我已经阅读了它,并且开始在 Django 中使用 .extra
可能性,但我无法实现我的目标。我也将我的尝试附加到所需的 SQl 查询中。提前谢谢你。
期望的结果将等于此 PosreSql 查询的结果:
SELECT
time_stamp,
AVG(ABS(ddt))
FROM tropo
WHERE time_stamp BETWEEN '2018-01-16 8:00' AND '2018-01-17 8:00'
GROUP BY time_stamp
我的尝试是在 Django 中:
Table.objects.all().filter(time_stamp__range=(2018-01-16 8:00, 2018-01-17 8:00))
.extra(select={"field_abs": "abs(field)"})
.values('time_stamp')
.annotate(avg_field=Avg('field_abs'))
我怎样才能使我的 Djanogo 查询有效?
我不认为你真的需要额外的查询,试试这个:
from django.db.models import Func, Avg
tables = Table.objects.filter(time_stamp__range=(2018-01-16 8:00, 2018-01-17 8:00))
tables = tables.values('time_stamp').annotate(avg_field=Avg(Func('field', function='ABS')))