Navrhuji rychlejší způsob.
Získejte počet řádků:
SELECT CEIL(COUNT(*)/2) FROM data;
Pak vezměte střední hodnotu v seřazeném poddotazu:
SELECT max(val) FROM (SELECT val FROM data ORDER BY val limit @middlevalue) x;
Testoval jsem to s datovou sadou 5x10e6 náhodných čísel a najde medián za méně než 10 sekund.
Tím se najde libovolný percentil nahrazením COUNT(*)/2
s COUNT(*)*n
kde n
je percentil (0,5 pro medián, 0,75 pro 75. percentil atd.).