将SQLite转换为Django ORM

时间:2017-08-23 04:33:06

标签: mysql django sqlite orm django-orm

我在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_timeaverage_distance字段对数据进行分组。任何帮助将非常感激。谢谢。

1 个答案:

答案 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部分。