【LeetCode】569. Median Employee Salary 员工薪水中位数

1
2

第一次做到SQL的题。

window function

select
    id,
    company,
    salary
from (
    select
        *,
        (count(salary) over (partition by company)) / 2.0 as cnt,
        row_number() over (partition by company order by salary) as rk
    from Employee
) t
where rk between cnt and cnt+1

cross join

这样每一行都会和其它所有行交叉出一行来,对每个(id, company, salary),计算出同company里排在它后面的个数-同company里排在它前面的个数,这个值在[-1, 1]区间内时,该salary就是中位数。

# Write your MySQL query statement below
select
    t1.id,
    t1.company,
    t1.salary
from Employee t1
join Employee t2
on t1.company = t2.company
group by t1.id, t1.company, t1.salary
having abs(sum(case
    when (t1.salary < t2.salary) or (t1.salary = t2.salary and t1.id < t2.id) then 1
    when (t1.salary > t2.salary) or (t1.salary = t2.salary and t1.id > t2.id) then -1
    else 0 end    
)) <= 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值