Django-Abfrage - "case when" mit Aggregationsfunktion

8

Ich habe das folgende Django-Modell (zugeordnet zu Tabelle 'A'):

%Vor%

Ich möchte oben folgende einfache Abfrage durchführen:

%Vor%

Ich versuche, rohes SQL zu vermeiden - wie kann das mit django implementiert werden (im obigen Beispiel verwende ich avg, aber die gleiche Frage ist auch relevant für max, min, sum etc.)?

Ich habe versucht, extra und aggregiert:

%Vor%

und

%Vor%

Die Aggregatfunktion funktioniert jedoch nur mit Modellfeldern, so dass das zusätzliche Feld hier nicht verwendet werden kann. Wie kann das mit Django gemacht werden?

Danke für die Hilfe

    
Lin 26.09.2010, 18:04
quelle

3 Antworten

2

Was getan werden kann, damit wir django queryset verwenden können, ist etwa so:

%Vor%

Um das Ergebnis zu verwenden:

%Vor%

Und dies würde die benötigte Funktionalität ermöglichen.

    
Lin 27.09.2010, 11:42
quelle
2

Soweit ich weiß, gibt es (leider) keine Möglichkeit, das zu tun, was Sie beschrieben haben, ohne auf Raw SQL zurückzugreifen.

Das heißt, ist eine Möglichkeit, den Durchschnitt zu berechnen, den Sie beschreiben, wenn Sie bereit sind, Ihre Daten ein wenig zu denormalisieren. Sie können beispielsweise eine neue Spalte mit dem Namen average_field hinzufügen, die automatisch auf den entsprechenden Wert für save() gesetzt wird. Sie können save() entweder überschreiben oder auf ein Signal tippen, um dies automatisch zu tun. Zum Beispiel

%Vor%

Sobald Sie dies tun, wird Ihre Abfrage sehr einfach.

%Vor%     
Manoj Govindan 27.09.2010 06:18
quelle
1

Django 1.8 unterstützt CASE WHEN-Ausdrücke standardmäßig, siehe Ссылка

    
akaariai 01.04.2015 05:48
quelle

Tags und Links