每天计算中值

时间:2018-09-03 12:59:20

标签: mysql sql database join select

有人可以帮我计算每个日期的中位数吗?

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 :(得分:0)

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

如果示例数为偶数,则选择下面的值。基数均匀的集合的中位数定义不明确。