SQL,刷题总结(二) 关于中位数查询

443 阅读1分钟

思路

该类题目作者在参考论坛后获得的重点就是:中位数一定同时大于等于正序或逆序累加之和
(注:以下题目类型以及部分解答思路均转自力扣(LeetCode),有需要的朋友可自行在力扣网上查找)

给定数字频率的中位数查找

中位数数字.png

思路:
1.筛选出中位数
2.对中位数求平均值

掌握函数"sum() over()"

select
    avg(Number) as 'median'
        from 
        (select 
            Number,
            sum(Frequency) over(order by Number) as shengxu,#求出升序之和,
            sum(Frequency) over(order by Number desc) as jiangxu #求出降序之和
            from Number
         ) as N1,
         (select sum(Frequency)/2 as t from Numbers)as N2
where shengxu >=t and jiangxuxu >=t       

员工薪水中位数

查询出不同公司的员工中位数 员工薪水中位数.png

思路:
1.按公司分组进行工资排序
2.同样工资排序对应的ID计数累加应大于等于工资排序的正序和逆序的一半

select Id,company,Salary
from
(select 
    Id,
    Company,
    Salary,
    row_number() over(partition by Company order by Salary) as ranking,
    count(Id) over(partition by Company) as cnt 
    from Employee
) as a
where ranking>=cnt/2 and ranking<=cnt/2+1