Ich schreibe eine SQL das Medium aus einer Liste von Zahlen zu erhalten (übernehmen die Länge der Liste ungerade ist)order by-Klausel in Mysql
set @r=0; select S.num from (select num, case when num is not NULL then (@r:[email protected]+1) end as rowIndex from T1 order by num) S where rowIndex = ceil(@r/2)
Diese Abfrage funktioniert, aber ich bin verwirrt durch meine subquery . Meine Frage ist die folgende: Wenn ich einfach gebe, habe ich 2 Spalten, wobei die erste Spalte die ursprüngliche Liste von Zahlen in der ursprünglichen Reihenfolge ist, z. B. 10,1,3,11,5,4,19. und die zweite Spalte ist der Zeilenindex, 1,2,3,4, .... Beachten Sie, dass ich zuerst meine ursprüngliche Liste in aufsteigender Reihenfolge sortieren und dann jeder Zeile ihren Zeilenindex geben soll.
Ich dachte zunächst, dass select num, case when num is not NULL then (@r:[email protected]+1) end as rowIndex from T1 order by num
eine Tabelle zu produzieren, so dass die erste Spalte die sortierte Version meiner ursprünglichen Liste ist, aber dann der 2. Säule ist eine Umlagerung des Indexmenge [1,2,3, ... ]. Weil ich denke, die Reihenfolge der Abfrage ist: zuerst erstellen Sie eine Tabelle wie von select num, case when num is not NULL then (@r:[email protected]+1) end as rowIndex from T1
vorgeschlagen, dann sortiert es diese Tabelle von num
Spalte, und daher, wenn num
Spalte sortiert ist, sollte die rowIndex
Spalte nicht mehr sein [1,2,3 , ...].
Aber eigentlich scheint es, dass es zunächst nur die num
Spalte sortieren und dann Zeilenindex hinzufügen. In einem anderen Wort finde ich, dass, ob ich order by num
hinzufüge oder nicht, die 2. Spalte immer ein schöner Zeilenindex [1,2,3,4, ...] sein wird. Warum?
Können Sie ein tabellarisches Daten Beispiel hinzufügen, weil es jetzt wirklich schwer zu folgen, was Sie sprechen –
@NorbertvanNobelen Sorry, ich war gerade dabei zu tun, @Used_By_Already hat eine Tabelle in der Antwort unten gemacht. Aber ich bin immer noch verwirrt über diese 'order by' -Klausel in Mysql – ftxx