より速い方法を提案します。
行数を取得する:
SELECT CEIL(COUNT(*)/2) FROM data;
次に、ソートされたサブクエリで中央の値を取得します:
SELECT max(val) FROM (SELECT val FROM data ORDER BY val limit @middlevalue) x;
これをランダムな数値の5x10e6データセットでテストしたところ、10秒以内に中央値が見つかりました。
これにより、COUNT(*)/2
を置き換えることにより、任意のパーセンタイルが検出されます。 COUNT(*)*n
を使用 ここで、n
はパーセンタイルです(中央値の場合は.5、75パーセンタイルの場合は.75など)。