Die Entwicklungsversion von Django hat Aggregatfunktionen wie Avg, Count, Max, Min, StdDev, Summe und Varianz ( link text ). Gibt es einen Grund Median fehlt auf der Liste?
Die Implementierung scheint einfach zu sein. Fehle ich etwas? Wie viel tun die Aggregatfunktionen hinter den Kulissen?
Weil Median kein SQL-Aggregat ist. Siehe zum Beispiel die Liste der PostgreSQL-Aggregatfunktionen und die Liste der MySQL-Aggregatfunktionen .
Hier ist Ihre fehlende Funktion. Übergeben Sie ein Abfrage-Set und den Namen der Spalte, für die Sie den Median finden möchten:
%Vor%Das war nicht so schwer, wie einige der anderen Antworten darauf hindeuten. Das Wichtigste ist, dass die DB-Sortierung die ganze Arbeit erledigt. Wenn Sie also die Spalte bereits indexiert haben, ist das ein supergünstiger Vorgang.
(update 1/28/2016) Wenn Sie bei der Definition des Median für eine gerade Anzahl von Elementen strikter sein wollen, wird dies den Wert der beiden mittleren Werte zusammensetzen.
%Vor%Nun, der Grund ist wahrscheinlich, dass Sie alle Zahlen verfolgen müssen, um den Median zu berechnen. Durchschnitt, Anzahl, Max, Min, StDev, Summe und Varianz können alle mit konstanten Speicheranforderungen berechnet werden. Das heißt, sobald Sie eine Nummer "aufzeichnen", werden Sie sie nie wieder brauchen.
FWIW, die zu verfolgenden Variablen sind: min, max, count, <n>
= Durchschnitt, <n^2>
= Durchschnitt des Quadrats der Werte.
Ich habe keine Ahnung, welches db-Backend Sie verwenden, aber wenn Ihre db ein anderes Aggregat unterstützt, oder Sie eine clevere Möglichkeit finden, es zu tun, können Sie wahrscheinlich leicht darauf zugreifen durch Aggregieren .
FWIW, Sie können PostgreSQL 8.4 und höher erweitern, um eine mediale Aggregatfunktion mit diesen Code-Snippets zu haben.
>Andere Code-Snippets (die für ältere Versionen von PostgreSQL funktionieren) sind hier gezeigt . Lesen Sie unbedingt die Kommentare für diese Ressource.
Tags und Links python django aggregate-functions