美文网首页
leetcode571给定数字的频率查询中位数

leetcode571给定数字的频率查询中位数

作者: 酸甜柠檬26 | 来源:发表于2019-11-24 18:13 被阅读0次

    Question:
    numbers表中保存着数字的值和频率:


    image.png

    在此表中数字为:0、0、0、0、0、0、0、1、2、2、2、3,所以中位数是(0+0)/2=0
    编写一个查询来查找所有数字的中位数并将结果命名为median.


    image.png

    思路:
    1、计算数据的总个数sum(frequency) num;
    2、利用总个数来判断中位数所应处于的位置:
    如果num为偶,则中位数位于num/2 num/2+1
    如果num为奇,则中位数位于num/2+0.5;
    3、利用2中求得中位数的位置来确定原表中正好处于该位置上的数,按照数据排序,并根据频数范围来判断。

    select (sum(r1)+sum(r2))/2 median
    from
    (
    select if(z1>@m and z1<=@m:=@m+frequency,number,0) r1,
                 if(z2>@m and z2<=@m:=@m+frequency,number,0) r2
     from
            (
             select if(num%2=0,num/2,num/2+0.5) z1,
                            if(num%2=0,num/2+1,num/2+0.5) z2
             from
                        (select sum(frequency) num from numbers) b)t ,
            (select @m:=0,@n:=0) r,
            (select * from numbers order by number) y   
    ) p
    

    相关文章

      网友评论

          本文标题:leetcode571给定数字的频率查询中位数

          本文链接:https://www.haomeiwen.com/subject/hjttwctx.html