Ich brauche Medianwert in Spalte "Median". Irgendwelche Ideen, bitte?Wie wird der Medianwert extrahiert?
SELECT
MIN(score) min, CAST(AVG(score) AS float) median, MAX(score) max
FROM result JOIN student ON student.id = result.student_id
Ich brauche Medianwert in Spalte "Median". Irgendwelche Ideen, bitte?Wie wird der Medianwert extrahiert?
SELECT
MIN(score) min, CAST(AVG(score) AS float) median, MAX(score) max
FROM result JOIN student ON student.id = result.student_id
Ich denke, die einfachste Methode PERCENTILE_CONT()
oder PERCENTILE_DISC()
ist:
SELECT MIN(score) as min_score,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY score) as median_score,
MAX(score) max_score
FROM result r JOIN
student s
ON s.id = r.student_id;
Dies setzt voraus (nach billigem Ermessen), dass score
numerisch ist. Der Unterschied zwischen PERCENTILE_CONT()
und PERCENTILE_DISC()
ist, was passiert, wenn es eine gerade Anzahl von Werten gibt. Das ist normalerweise eine unbedeutende Überlegung, es sei denn, Sie haben eine kleine Menge an Daten.
Vielen Dank. Ich hatte keine Ahnung, dass eine solche Funktion überhaupt existiert (PERCENTILE_COUNT). – nikita100k
Durchschnitt ist nicht Median, du hast Recht. Sie können es die genaue Art und Weise tun, mit:
SELECT ( (SELECT MIN(score) FROM Results X
WHERE (SELECT COUNT(*) FROM Results Y WHERE Y.score<= X.score)
>= (SELECT COUNT(*) FROM Results)/2)
+ (SELECT MAX(num) FROM Results X
WHERE (SELECT COUNT(*) FROM Results Y WHERE Y.score >= X.score)
>= (SELECT COUNT(*) FROM Results)/2)
)/2 AS median
Diese Griffe der Fall, wo die Grenze zwischen dem oberen und unteren 50% zwischen zwei Werten; willkürlich nimmt sie den Mittelweg zwischen ihnen als Median. Es gibt Argumente, warum diese etwas höher oder niedriger gewichtet werden könnten, aber jeder Wert in diesem Intervall teilt die Population korrekt in zwei Teile.
Oder, wenn Sie mit einer hyperbolischen Verteilung zu tun hat, gibt es eine Abkürzung Annäherung:
SELECT SQRT(SUM(num)/SUM(1.0/num)) FROM List
Viele andere realen Distributionen viele kleine Mitglieder haben und ein paar großen Mitglieder. Nachdem Sie SAVE gedrückt und die vorherige Antwort gesehen haben: Ja, SQL2003 gibt Ihnen jetzt etwas einfacheres :-)
Mögliches Duplikat von [Funktion, um Median in Sql Server zu berechnen] (http://stackoverflow.com/questions/1342898/) Funktion-zu-berechnen-Median-in-SQL-Server) –
Bitte markieren Sie Ihre Frage mit der Datenbank, die Sie verwenden. –
Entschuldigung. Ich benutze PostgreSQL 9.6 – nikita100k