Ik stel een snellere manier voor.
Krijg het aantal rijen:
SELECT CEIL(COUNT(*)/2) FROM data;
Neem dan de middelste waarde in een gesorteerde subquery:
SELECT max(val) FROM (SELECT val FROM data ORDER BY val limit @middlevalue) x;
Ik heb dit getest met een 5x10e6-dataset van willekeurige getallen en het zal de mediaan in minder dan 10 seconden vinden.
Dit zal een willekeurig percentiel vinden door de COUNT(*)/2
. te vervangen met COUNT(*)*n
waar n
is het percentiel (0,5 voor mediaan, 0,75 voor 75e percentiel, enz.).