有人可以帮我计算每个日期的中位数吗?
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;
谁错了? 谢谢!
答案 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;
如果示例数为偶数,则选择下面的值。基数均匀的集合的中位数定义不明确。