Ich möchte den Median von y
in Untergruppen berechnen dieses einfachen xy_table
:
In diesem Beispiel ist jedes x
eindeutig und die Tabelle ist bereits nach x
sortiert.
Ich möchte nun GROUP BY round(x)
und bekomme das Tupel, das den Median von y
in jeder Gruppe enthält.
Ich kann mit dieser Ranking-Abfrage bereits den Median für die gesamte Tabelle berechnen:
%Vor% Ausgabe: 0.1, 4.0
Aber ich habe es noch nicht geschafft, eine Abfrage zu schreiben, um den Median für Untergruppen zu berechnen.
Achtung: Ich habe keine median()
Aggregationsfunktion verfügbar. Bitte schlagen Sie auch keine Lösungen mit speziellen PARTITION
-, RANK
- oder QUANTILE
-Anweisungen vor (wie in ähnlichen, aber zu herstellerspezifischen SO-Fragen ). Ich brauche einfachen SQL (d. H. Kompatibel zu SQLite ohne median()
-Funktion)
Bearbeiten: Ich war eigentlich auf der Suche nach dem Medoid und nicht nach dem Median .
Ich schlage vor, das Computing in Ihrer Programmiersprache zu machen:
%Vor% Aber wenn Sie mit SQLite festgefahren sind, können Sie jede Gruppe nach y
sortieren und die Datensätze in der Mitte wie folgt auswählen: Ссылка :
AKTUALISIEREN : nur der größere "Medianwert" ist wichtig für gerade nr. von Zeilen, also wird kein avg()
benötigt:
OK, dies beruht auf einer temporären Tabelle:
%Vor% Aber Sie könnten dies möglicherweise für eine Reihe von Daten erstellen, an denen Sie interessiert sind. Ein anderer Weg wäre, sicherzustellen, dass xy_table
diese Sortierreihenfolge hat, anstatt nur auf x
zu bestellen. Der Grund dafür ist, dass SQLite keine Möglichkeit zur Zeilennummerierung hat.
Dann:
%Vor% Wenn Sie den Median als den größeren der beiden mittleren Werte behandeln möchten, was nicht der Definition von @Aprillion entspricht, dann würden Sie einfach den größeren der beiden y
-Werte wählen, anstatt ihr Durchschnitt, in der dritten Zeile der Abfrage.