Расчет медианного значения на каждый день - PullRequest
0 голосов
/ 03 сентября 2018

Может кто-нибудь помочь мне рассчитать медиану для каждой даты?

activity
user_id login_time  bet
105 2018-04-01  20966119
102 2018-04-01  2027700
105 2018-04-01  5478000
104 2018-04-01  78448383
104 2018-04-06  49730093
101 2018-04-06  2750000
103 2018-04-15  16625000
105 2018-04-16  
106 2018-04-19  3095584

выход

login_time   median
2018-04-01   13222060
2018-04-06    26240047

Мой запрос

SELECT login_time, IF(SUM((IFNULL(bet, 0)) / 2) % 2 = 0, SUM(IFNULL(bet, 0)) 
    / 2 + 1, SUM(IFNULL(bet, 0)) / 2) 
 AS median
FROM activity
WHERE login_time BETWEEN '2018-04-01' AND '2018-04-06'
GROUP BY login_time;

Чего не так? Спасибо!

1 Ответ

0 голосов
/ 03 сентября 2018

Для этого есть group_concat() трюк, если ваши данные не слишком велики. Это работает довольно хорошо:

select a.login_time,
       substring_index(substring_index(group_concat(bet order by bet), ',', ceil(count(*) / 2), ',', -1)
from activity a
where a.login_time between '2018-04-05' and '2018-04-18'
group by a.login_time;

Если есть четное количество примеров, тогда выбирается значение в нижней части. Медианы не определены четко для множеств с равномерным количеством элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...