2010-11-23 11 views
2

私は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); 
} 
+0

MySQLには、このような要件に通常使用する分析/ランキング/ウィンドウ機能はありません。 –

+0

あなたの '選択するblah blah'のためのフィルタリングのためのあなたの必要性をどこにしますか? – ajreal

+0

はい、結果セットが約50k行に絞り込まれますが、それでもパフォーマンスは苦しくなります。私は50k全体を返そうとしましたが、メモリ過負荷のために失敗しました – breuklyner

答えて

0

をあなたでした:

GROUP BY CEIL(`percentage`/10)*10 

これは、行を10%のグループにグループ化するものですか?あなたにもっと役立つ情報やコードがもう少し必要です。

+0

面白い!列が1,2,3 ... 19,20で構成されていれば、1,3,5 ... 20? '%'はどのように定義されていますか? – breuklyner

関連する問題