在MySQL中,如何获得某个列的中位数,在我的情况下" likes_count",在多个表中聚合,并将它们按照另一列进行分组,在我的情况下" creator_id&# 34;
我确定我在这里很清楚;我有多个带有列的表" likes_count"和" creator_id",我希望在所有表格中获得每个创作者的中位数likes_count,而不是每个表格。
我可以用AVG()获得平均值,但似乎没有中值函数。
select a.creator_id, avg(a.liked_count) as average
from (
select creator_id, liked_count from type1
union select creator_id, liked_count from type2
union select creator_id, liked_count from type3
union select creator_id, liked_count from type4
union select creator_id, liked_count from type5
) a group by a.creator_id order by average desc, a.creator_id desc limit 10
编辑:我应该补充一点,我需要将整个事情放在MySQL服务器上,而不将数据返回到我的Web服务器,因为数据集需要扩展到数百万,这个功能需要经常运行(和很快(至少在100ms以下,sub 50会更好)并且我需要能够限制。因此我已经为我的AVG示例添加了限制;我需要它,但是对于中位数。
答案 0 :(得分:0)
至少据我所知,没有中位函数。
可能有更好的方法可以做到这一点,但是当我需要它时,我按照相关列的顺序采取了最高计数/ 2 + 1项目,然后采取了最后一项。
对于我足够接近的目的,但是对于一个真正准确的中位数,你需要检查计数是否是偶数,如果是,那么得到最后两个(两个中间项),并平均它们的值。