Fehlende 'Median'-Aggregatfunktion in Django?

8

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?

    
sutee 03.06.2009, 00:51
quelle

6 Antworten

12

Weil Median kein SQL-Aggregat ist. Siehe zum Beispiel die Liste der PostgreSQL-Aggregatfunktionen und die Liste der MySQL-Aggregatfunktionen .

    
jacobian 03.06.2009, 03:27
quelle
15

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%     
Mark Chackerian 29.02.2012 16:56
quelle
7

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.

    
dmo 03.06.2009 00:57
quelle
2

Eine starke Möglichkeit ist, dass Median nicht Teil von Standard-SQL ist.

Es erfordert auch eine Art, was es ziemlich teuer macht, zu berechnen.

    
S.Lott 03.06.2009 00:59
quelle
2

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 .

    
quelle
1

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.

    
Mike T 06.07.2011 11:09
quelle