Вычисление процентили занимает место в MySQL

Я настоятельно рекомендую прочитать Javascript: The Good Parts

19
задан lhahne 29 June 2009 в 07:41
поделиться

3 ответа

Это относительно некрасивый ответ, и я чувствую себя виноватым, говоря это. Тем не менее, это может помочь вам в решении вашей проблемы.

Один из способов определить процентное соотношение - подсчитать все строки и подсчитать количество строк, которые больше указанного вами числа. Вы можете вычислить больше или меньше и при необходимости принять обратное.

Создайте индекс для своего числа. total = выберите количество (); less_equal = select count (), где значение> indexed_number;

Процент будет примерно таким: less_equal / total или (total - less_equal) / total

Убедитесь, что оба из них используют индекс, который вы создан. Если это не так, подправьте их, пока они не станут. В запросе объяснения в правом столбце должно быть указано «использование индекса». В случае select count (*) он должен использовать индекс для InnoDB и что-то вроде const для MyISAM. MyISAM будет знать это значение в любое время, не вычисляя его.

Если вам нужно было сохранить процентное значение в базе данных, вы можете использовать приведенную выше настройку для повышения производительности, а затем вычислить значение для каждой строки, используя вторую запрос как внутренний выбор. Значение первого запроса можно задать как константу.

Это поможет?

Джейкоб

2
ответ дан 30 November 2019 в 03:59
поделиться

нет простого способа сделать это. см. http://rpbouman.blogspot.com/2008/07/calculating-nth-percentile-in-mysql.html

4
ответ дан 30 November 2019 в 03:59
поделиться

Чтобы получить ранг, я бы сказал, вам нужно (слева) внешнее присоединить таблицу к самой себе, что-то вроде:

select t1.name, t1.value, count(distinct isnull(t2.value,0))  
from table t1  
left join table t2  
on t1.value>t2.value  
group by t1.name, t1.value 

Для каждой строки вы будете считать, сколько (если есть) строки той же таблицы имеют меньшее значение.

Обратите внимание, что я больше знаком с sqlserver, поэтому синтаксис может быть неправильным. Кроме того, отдельный объект может не иметь правильного поведения для того, чего вы хотите достичь. Но это общая идея.
Затем, чтобы получить реальный процентильный ранг, вам необходимо сначала получить количество значений в переменной (или различных значений в зависимости от принятого вами соглашения) и вычислить процентильный ранг, используя реальный ранг, указанный выше.

0
ответ дан 30 November 2019 в 03:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: