在MySQL中,如何将某一列的中位数(在我的情况下为“ liked_count”)汇总到多个表中,并按另一列(在我的情况下为“ creator_id”)进行分组?

只是为了确保我在这里很清楚。我有多个带有“ liked_count”和“ creator_id”列的表,我想获得所有表中每个创建者的中值Liked_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服务器,因为数据集需要扩展到数百万个,因此该功能需要经常(且快速(在至少在100毫秒以下,最好使用sub 50以下),并且我需要能够进行限制。因此,我在我的AVG示例中添加了一个限制;我需要这样做,但需要中位数。

最佳答案

至少据我所知,没有中间函数。

可能有更好的方法来执行此操作,但是当我需要它时,在按相关列排序时,我选择了最前面的计数/ 2 + 1个项目,然后选择了最下面的一个。

对于我来说,这已经足够接近了,但是为了获得真正准确的中位数,您需要检查计数是否为偶数,如果是,请获取最低的两个(两个中间项目),然后取其平均值。

关于mysql - SQL从多个表中获取列的中位数,按用户标识分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46615409/

10-13 08:54