2016-07-21 17 views
1
set @ct :=(select count(*) from medi); 
set @ro :=0; 
select avg(num) as median from (select * from medi order by num) 
where (select @ro:= @ro+1)  
between @ct/2.0 AND @ct/2.0+1; 

Werte in der Tabelle ausgeführt werden
+ ------ +
| num |
+ ------ +
| 2 |
| 55 |
| 63 |
| 85 |
| 32 |
| 15 |
| 3 |
| 36 |
| 69 |
+ ------ +
Benötigen Sie Hilfe bei der Abfolge der Ausführung und die die Rolle von @ro in where-KlauselDies ist ein Code, der den Median der Werte in einer Tabelle in mysql zu berechnen, muss ich einige Experten, die Sequenz zu erklären, in der die Befehle

Antwort

0

Nun zu verstehen beginnen mit dieser Abfrage das falsche Ergebnis erzeugt. Es produzierte 32 den Median, der falsch ist. Der Median sollte 36 sein

Der Median der Wert ist, um die höhere Hälfte einer Datenprobe, eine Population oder eine Wahrscheinlichkeitsverteilung, von der unteren Hälfte trennt. In einfachen Begriffen kann es als der "mittlere" Wert eines Daten festgelegt werden. Zum Beispiel ist in dem Datensatz {1, 3, 3, 5, 9, 11, 13} der Median 5, die vierte Zahl in der Stichprobe. Der Median ist ein gängiges Maß für die Eigenschaften eines Datensatzes in Statistik und Wahrscheinlichkeitstheorie.

Ref: https://en.wikipedia.org/wiki/Median

Das Problem mit diesem wenig SQL ist, dass es nicht die Werte nicht bestellen, die zur Bestimmung des Medians erforderlich ist.

Dieser Stackoverflow Q & A: Simple way to calculate median with MySQL hat viele verschiedene Möglichkeiten, Median zu berechnen und mit Erläuterungen.

Wenn Sie wirklich wissen wollen, was die obige Abfrage hat
Schritt 1: die Anzahl der Zeilen in der Tabelle Count
Schritt 2: Erstellen Sie eine Variable und asign auf Null
Schritt 3: die Variable als Nummer verwenden, die Für jede Zeile wird um eins erhöht, um die halbe Markierung der Tabelle zu finden. Nimm den Durchschnitt der Zahlen, die neben der Halbzeitmarke liegen.

Jetzt werden Sie erkennen, warum es falsch ist, es auferlegt keine Reihenfolge auf den Inhalt der Tabelle.

+0

Vielen Dank, das hat mir sehr geholfen, ich werde versuchen, Ordnung in dieser Abfrage hinzuzufügen –

+0

Froh, dass ich geholfen habe. Da Sie noch neu hier sind, erlauben Sie mir, Sie auf diesen Link zu verweisen: http://StackOverflow.com/Help/Someone-answers – e4c5

+0

Ich denke, dass dieser Code viel kleiner und effizienter als die Antworten in http: // stackoverflow ist. com/questions/1291152/simple-to-calculate-median-with-mysql können Sie vergleichen und sagen, ob dies mehr oder weniger effizient ist –