我在SQLite中有一个查询,它按周对字段进行分组,并在距离上执行 sum 和 average 和时间字段在同一个表中:
select
strftime('%W', datetime) WeekNumber,
sum(distance) as TotalDistance,
sum(distance)/sum(time) as AverageSpeed
from sample_login_run
group by WeekNumber;
我正在尝试将此查询转换为Django ORM并避免使用Raw
函数。我知道我需要在Django ORM中使用extra
。这应该不是问题。我想出来了:
Run.objects.extra(select={'week': "strftime('%%W', datetime)"}).values(
'week','distance').annotate(
total_distance=Sum('distance'), average_time=F('distance') / F('time'))
但这也是按average_time
和average_distance
字段对数据进行分组。任何帮助将非常感激。谢谢。
答案 0 :(得分:0)
对此的正确解决方案是:
Run.objects.extra(select={'week': "cast(strftime('%%W', date_run) as integer)"}).values('week').annotate(
total_distance=Sum('distance'), average_time=F('distance') / F('time'))
values
中传递的字段将位于查询的group by
部分。