【问题标题】:Convert SQLite to Django ORM将 SQLite 转换为 Django ORM
【发布时间】:2018-01-31 12:16:03
【问题描述】:

我在 SQLite 中有一个查询,它按 weeks 对字段进行分组,并在 distance 上执行 sumaveragetime 字段在同一个表中:

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 字段对数据进行分组。任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: mysql django sqlite orm django-orm


    【解决方案1】:

    正确的解决方案是:

    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 部分下。

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 2020-09-12
      • 2018-07-19
      • 2021-04-02
      • 2020-10-31
      • 2019-04-03
      • 2017-09-10
      • 2022-08-18
      相关资源
      最近更新 更多