Вот пример расчета квартилей для диапазонов значений e256
в пределах групп e32
, индекс (e32, e256) в этом случае является обязательным:
SELECT
@group:=IF(e32=@group, e32, GREATEST(@index:=-1, e32)) as e32_,
MIN(e256) as so,
MAX(IF(lq_i=(@index:=@index+1), e256, NULL)) as lq,
MAX(IF(me_i=@index, e256, NULL)) as me,
MAX(IF(uq_i=@index, e256, NULL)) as uq,
MAX(e256) as lo
FROM (SELECT @index:=NULL, @group:=NULL) as init, test t
JOIN (
SELECT e32,
COUNT(*) as cnt,
(COUNT(*) div 4) as lq_i, -- lq value index within the group
(COUNT(*) div 2) as me_i, -- me value index within the group
(COUNT(*) * 3 div 4) as uq_i -- uq value index within the group
FROM test
GROUP BY e32
) as cnts
USING (e32)
GROUP BY e32;
Если естьв группировках нет необходимости, запрос будет немного проще.
PS test
- это таблица случайных значений моей игровой площадки, где e32
- это результат int(random.expovariate(1.0) * 32)
Python и т. д.