Archivlink: javarea.de Forum > PHP, MySQL & CGI > Median einer Spalte ermitteln
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > Median einer Spalte ermitteln

Pages: [1]

geschrieben von Micha am 06.02.2009 - 20:54
Hi,

gibts eine einfache Möglichkeit, den Median einer MYSQL-Tabellenspalte zu ermitteln?

Gruß Micha

geschrieben von Klaush am 07.02.2009 - 18:41
Probiert und gebraucht habe ich das noch nicht und wozu brauchst du das, wenn die Frag erlaubt ist?

Hier aber mal ein bisschen Code:
http://www.spotlight-wissen.de/arch....18886.html

geschrieben von Danny am 07.02.2009 - 19:54
Weis zwar nicht wozu Micha das im speziellen braucht, aber der Median macht z.B. Sinn um Mittelwerte zu berechnen, dabei aber auf extreme Abweichungen keine Rücksicht zu nehmen.

Wikipedia gibt als schönes Beispiel:

Die Einkommen einer Gruppe von 10 Personen verteilen sich wie folgt:
9 Personen verdienen jeweils EUR 1.000 und
1 Person verdient EUR 1.000.000.

Das Durchschnittseinkommen beträgt EUR 100.900, der Median jedoch nur EUR 1.000.

geschrieben von Micha am 07.02.2009 - 22:15
Hallo Ihr beiden,

der Median ist ein sehr robustes Verfahren mit einem so-genannten hohen Bruchpunkt. Das Beispiel von Dany zeigt das ja sehr schön.

Ich habe ein Tachymeter mit der seriellen Schnittstelle verbunden und lass es derzeit (testweise) alle 1/4 Stunde fünf Punkte anmessen. Die ermittelten Daten (Strecke, Azimut, Zenitwinkel) landen in einer MySql Tabelle. Damit man dieses Monitoring verfolgen kann, habe ich eines PHP-Script geschrieben, das ein Bild aus den Daten erzeugt. Um im Bild die Intervallgrenzen zu bekommen, nutze ich den kleinsten und den größten Wert und rechne das ins Verhältnis zu meinen Pixeln. Problem ist nun, wenn ein grober Ausreißer drin ist, dann funktioniert diese Min/Max Umrechnung natürlich nur bedingt. Drum wollte ich mit dem Median die Werte prüfen, ob sie im Rahmen liegen oder eben nicht.
Hoffe es war verständlich.

Deinen Code, Klaus, probier ich Montag in der Schule aus - werd dann eine Rückmeldung geben.

Gruß Micha

geschrieben von Micha am 09.02.2009 - 11:10
Hi,

das muß mir wohl mal einer Übersetzen

So der Original-Code:
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
SELECT x.val

FROM data AS x, data AS y

GROUP BY x.val

HAVING SUM( SIGN( 1 - SIGN( y.val - x.val ) ) ) = ( COUNT(*) + 1 ) / 2


und nun mein Versuch, es nutzbar zu machen:

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
SELECT `strecke`

FROM `beobachtungen` AS x, `beobachtungen` AS y

GROUP BY `strecke`

HAVING SUM( SIGN( 1 - SIGN( y - x ) ) ) = ( COUNT(*) + 1 ) / 2


So gehts leider nicht. Wie müsste es aussehen?

Gruß Micha

geschrieben von Klaush am 09.02.2009 - 11:59
Was sagt denn MySQL?

Du übergibst ein und dieselbe Tabelle 2 Mal, einmal reicht aus.

FROM `beobachtungen` AS beob

Jetzt musst du aus deiner Tabelle die Felder übergeben, dass geschieht dann mittels der übergebenen Tabelle aus As, wobei die Felder y und x heißen, wenn das richtig so bei dir ist.

HAVING SUM( SIGN( 1 - SIGN( beab.y - beab.x ) ) ) = ( COUNT(*) + 1 ) / 2

geschrieben von Micha am 09.02.2009 - 18:06
Hi,

ich möchte den Median der Strecke haben. Es gibt keine zwei Spalten, daher kann ich mit dem Code im Moment nicht so viel Anfangen. Die Tabelle ist simple Aufgebaut nach diesem Schema:

HTML-Quelltext
1: 
id, strecke, richtung, zenit


ich suche lediglich den Median der Strecke. Also vereinfacht das:

HTML-Quelltext
1: 
SELECT MEDIAN(`strecke`) FROM `beobachtung`


(was es ja nicht gibt)

Gruß Micha


geschrieben von Klaush am 11.02.2009 - 08:15
Du brauchst den Median einer Strecke. Braucht man da nicht minestens 2 Werte um eine Berechnung durchführen zu können?

Wie die Formel nun aussehen muss weiß ich momentan auch noch nicht, aber vlt. kommen wir der Antwort ein Stück näher. Welche Tabellen und welche Werte musst du haben, um den Median auswerten zu können, nur die Strecke aus einer Tabelle und einem Feld reicht dann aber nicht?

geschrieben von Micha am 11.02.2009 - 11:58
Hi,

ich habe es im Moment anders gelöst. Ich nehme die Werte der ersten Messung und nutze die als Referenz. Das sollte reichen, da ich bei der Null-Messung selbst dabei bin und sehen kann, ob sie stimmen oder grob falsch sind.

Zum Median. Einfaches Beispiel: Eine SQL Tabelle mit einer Spalte und 5 Werten:
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
2
27
15
2
2


Spalte sortieren und den mittleren Wert suchen (bzw. bei gerader anzahl das Mittel der beiden mittleren Werte)

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
2
2
2   <---
15
27


Median = 2

Ich habe also mehrere Werte, ganz klar. Wenn man nur einen hat, dann ist Median = Mittelwert = (der eine) Messwert und man kann sich die Abfrage sparen

LG Micha

geschrieben von Martin am 11.02.2009 - 12:49
Hallo,

ich hab mal ein bissl gegoogelt und hab folgendes gefunden. http://dev.mysql.com/doc/refman/5.0....tions.html . Unten im "Comment" geht es auch um Median - Workarounds. Mit einen interessanten Literaturhinweis.

Vielleicht hilft dir das weiter.

martin

geschrieben von Micha am 12.02.2009 - 13:29
Hi Martin,

Danke für den Hinweis. Der Link zu MYSQL ist der selbe, wie der von Klaus. Mit dem dort angegebenem Code hatte ich ja meine Probleme

Ich mache extrem wenig mit Datenbanken - Dateien sind mir immernoch sympatischer - sodass die Anschaffung eines Buches hier den nötigen Rahmen sprengt. Trotzdem vielen Dank für Deinen Hinweis!

Gruß
Micha


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.