Проблема с вычислением стандартного отклонения и среднего значения ваших данных и выполнением обратного нормального поиска заключается в том, что вы делаете ОЧЕНЬ ограничительное предположение. Что делать, если ваши данные не являются нормальными? Во многих ситуациях это довольно плохое предположение.
В идеале вы хотите ответить на этот вопрос непараметрически , то есть без необходимости полагаться на некоторые предположения о распределении. Один из способов сделать это - использовать представление MySQL:
http://www.mysqltutorial.org/mysql-views-tutorial.aspx
Предполагая, что вы хотите вычислить процентили для длины сообщения каждой строки в таблице, вы можете попробовать создать представление MySQL, которое для строки i подсчитывает количество других длин сообщений, которые меньше или равны длине сообщения. для строки я. Поскольку таблица обновляется один раз для каждой вставки, поиск будет быстрым.
Если представление MySQL слишком медленное при расчете, вы также можете попробовать вставить следующую логику в запись на вашем уровне доступа к данным:
- Создайте в таблице свой собственный столбец "# длина сообщения меньше или равна мне".
- При добавлении новой строки заполните столбец "# длина сообщения меньше или равна мне" для этой строки, используя подходящее прямое выражение подсчета SQL.
- Также при вставке новой строки, выполните итерацию по всем другим строкам в этой таблице и увеличьте это «# длина сообщения меньше или равна мне» для всех строк, где длина сообщения больше, чем длина сообщения новой строки.
Поскольку ваша задача хорошо линейна в ранжировании, мы можем избежать уменьшения сложности O (n ^ 2) до O (n), используя последний подход. Надеюсь, это поможет.
Кроме того, если вы заинтересованы в выполнении каких-либо других манипуляций, кроме процентилей, посетите этот блог для получения информации о нормализации, масштабировании, ранжировании и т. Д. Он включает в себя хорошую графику того, что происходит с вашими данными, хотя и написано для c # :
http://www.redowlconsulting.com/Blog/post/2011/07/28/StatisticalTricksForLists.aspx