计算每天的中值



谁能帮我计算每个日期的中值?

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;

啦啦错了? 谢谢!

如果你的数据不是太大,有一个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;

如果有偶数个示例,则选择下侧的值。 对于具有偶数基数的集合,中位数没有很好的定义。

最新更新