0

NB! This question is related to Mysql 5.x and answers requiring v8.x does not help me here :-)

I've found a way to calculate percentiles in php from an array of data (around 150.000 record), but it takes up alot of memory which makes php time out sometimes. I would like this calculation to happen through mysql 5.7 instead.

my table has a bunch of records with a date and a score (1000 records a day), and I would like to be able to find the top 10% value based on the scores from ie. one month.

My php calculation looks like this:

private function getPercentile($percentile, $array, $key) {
        if(!array_key_exists($key, $array)) {
            return null;
        }
        $array = $array[$key];
        sort($array);
        $index = ($percentile/100) * count($array);
        if (floor($index) == $index) {
            $result = ($array[$index-1] + $array[$index])/2;

        }
        else {
            $result = $array[floor($index)];
        }
        return $result;
    }

Where I just take my mysql result array and put into the function after execution.

Table example:

requestTime<timestamp> score <double>
2021-08-10 07:44:58 0.96
2021-08-11 07:44:52 0.73
2021-08-12 07:44:51 0.78

can anyone transition this into a mysql query, then I would be truly thankful!

phpNoobish
  • 111
  • 1
  • 12

0 Answers0