美文网首页
LeetCode569员工薪水中位数

LeetCode569员工薪水中位数

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

    Question:
    Employee 表包含所有员工。Employee 表有三列:员工Id,公司名和薪水。


    image.png

    编写SQL查询来查找每个公司的薪水中位数。挑战点:你是否可以在不使用任何内置的SQL函数的情况下解决此问题。


    image.png

    思路:
    1、按照company进行分组排序—中位数在每组数据里面的靠中间排序的地方
    2、计算每组里面的数据总数—每组的中间位置,和各组数据总数有关
    3、限定每组company中的中位数所在位置—位置在num/2~num/2+1

    查询出表a:利用变量@求得的分组排序
    查询出表b:每个company的总数
    表a join 表b:在一个表里获得排序和各组总数
    where:条件限定,选出ranking在每组数据中的正确位置

    select t.id,t.company,t.salary
    from
            (select a.id,a.company,a.salary,a.ranking,b.num
             from
                     (select id,company,salary,
                                     if(@pre_company=company,@cur_rank:=@cur_rank+1,@cur_rank:=1) ranking,
                                            @pre_company:=company
                        from
                        employee3,(select @pre_company:=null,@cur_rank:=1) r
                        order by company,salary) a
            join
                    (select company,count(*) num from employee3 group by company) b
            on a.company=b.company
            ) t
    where t.ranking between t.num/2 and t.num/2+1
    

    相关文章

      网友评论

          本文标题:LeetCode569员工薪水中位数

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