2017-08-23 1 views
0

ich eine Abfrage in SQLite haben die Gruppen die Felder von Wochen und führt Summe und Durchschnitt über Abstand und Zeit Felder in der gleichen Tabelle:Convert SQLite zu Django ORM

select 
    strftime('%W', datetime) WeekNumber, 
    sum(distance) as TotalDistance, 
    sum(distance)/sum(time) as AverageSpeed 
from sample_login_run 
group by WeekNumber; 

Ich versuche, diese Abfrage in Django ORM zu konvertieren und zu vermeiden, Raw Funktion zu verwenden. Ich verstehe, dass ich extra in Django ORM verwenden müsste. Das sollte aber kein Problem sein. Ich kam auf den Punkt:

Run.objects.extra(select={'week': "strftime('%%W', datetime)"}).values(
      'week','distance').annotate(
      total_distance=Sum('distance'), average_time=F('distance')/F('time')) 

Aber das ist auch die Gruppierung der Daten von average_time und average_distance Feld. Jede Hilfe wird wirklich geschätzt. Vielen Dank.

Antwort

0

richtige Lösung hierfür lautet:

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')) 

in values bestanden Felder werden unter group by Teil der Abfrage gehen.

Verwandte Themen