Ich schlage einen schnelleren Weg vor.
Holen Sie sich die Zeilenanzahl:
SELECT CEIL(COUNT(*)/2) FROM data;
Nehmen Sie dann den mittleren Wert in einer sortierten Unterabfrage:
SELECT max(val) FROM (SELECT val FROM data ORDER BY val limit @middlevalue) x;
Ich habe dies mit einem 5x10e6-Datensatz von Zufallszahlen getestet und es findet den Median in weniger als 10 Sekunden.
Dadurch wird ein beliebiges Perzentil gefunden, indem COUNT(*)/2
ersetzt wird mit COUNT(*)*n
wobei n
ist das Perzentil (0,5 für Median, 0,75 für 75. Perzentil usw.).