私は50k行のデータセットを持ち、順序付けられたセットの10パーセンタイル値ごとに選択したいと思います。理想的には、NULL以外の値から等間隔の11の値を返します。MYSQLのデータセットからすべてのXパーセンタイル値を選択
私は、列全体を選択してPHPで行うことを避けようとしています。あるいは、それぞれ10個のクエリを実行して、それぞれ合計数に基づいて1行を選択しています。
これは、ユーザーの要求ごとに異なる列に対して7回実行されます。 (他のクエリパラメータが変更されますので、私はそれをキャッシュすることはできません。)
更新:私はこれを回避しようとしています:
$query = "SELECT BLAH BLAH" ;
$result = mysql_query($query);
$num_of_results = mysql_num_rows($result);
//divide count by 10 to get percentile sizes
$number_of_percentiles= 10;
$percentile_size = $num_of_results/ $number_of_percentiles;
//take each of the percentiles of the sample set
for ($a=0; $a<= $number_of_percentiles; $a++){
$query = "SELECT BLAH BLAH
LIMIT ". ($a * $percentile_size).",1";
$result = mysql_query($query);
$percentile_array[] = mysql_fetch_assoc($result);
}
MySQLには、このような要件に通常使用する分析/ランキング/ウィンドウ機能はありません。 –
あなたの '選択するblah blah'のためのフィルタリングのためのあなたの必要性をどこにしますか? – ajreal
はい、結果セットが約50k行に絞り込まれますが、それでもパフォーマンスは苦しくなります。私は50k全体を返そうとしましたが、メモリ過負荷のために失敗しました – breuklyner