sql over函数_使用 SQL 查找员工薪水中位数

SQL 是作为开发工程师、数据工程师必须要深入掌握的一项技能。我也一直在提升这部分的能力,从入门到精通。除了阅读一些 SQL 经典书籍,刷题也是一个不错的选择。于是,我将做过的题目与解法,汇总到这里,和大家一起学习。

SQL 练习题系列和「体验碎片」系列一样,会不定期进行更新。

题目:请编写 SQL 查询来查找每个公司的薪水中位数?

42cb100c8ae1247e48b4145128e33a25.png
预期结果:dd081768249a572230632739f58ced31.png

解法: 窗口函数

1.中位数理解:A 和 B 有 6 个员工,按公司分组,薪水排序,中位数在第 3 和第 4 个位置;C 有 5 个员工,按公司分组,薪水排序,中位数在第 3 个位置。总结规律就是假设公司有n个员工,排序只需在 n/2 AND n/2 + 1 即可2.利用窗口函数 row_number()over(),按公司分组,薪水排序,得出 ranking 排序。3.利用窗口函数 count()over(),得出每个公司员工总数 cnt。4.根据总结好的规律取出 ranking>=cnt/2 and ranking<=cnt/2+1 的交集即是符合中位数条件的员工。

select Id,Company,Salaryfrom(select Id,Company,Salary, row_number()over(partition by Company order by Salary)as ranking,count(Id) over(partition by Company)as cntfrom Employee)awhere ranking>=cnt/2 and ranking<=cnt/2+1
e47177da7c00b007f3268e23fa5d656f.png

a2787efdadf7ce448e0829a38c9c998b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值