题解 | #获取每个部门中当前员工薪水最高的相关信息#

获取每个部门中当前员工薪水最高的相关信息

https://www.nowcoder.com/practice/4a052e3e1df5435880d4353eb18a91c6

感觉:老实说这道题不能叫困难

这道题用窗口函数会更加方便简洁(当然单纯用聚合也是可以完成的),所以先稍微说下窗口函数是什么东东?

窗口函数,它能在不影响当前语句(即不加任何筛选,分组等)的情况下去实时分析处理数据。因为这个特性,它必须写在select子句中。基本格式如下:

sum(money) over(partition by users)
# 即  聚合函数 over ([partition by xxx] [order by xxx])
# partition by 的作用类似于 group by

更详细的介绍和用法例子在链接,大家可前往深入了解。

那么我们回到这道题当中,需求是获取每个部门当前员工薪水最高的相关信息,结果按照部门编号dept_no升序排列

注意四个红色标识

当前:一开始对from_dateto_date置之不理,觉得好像对题目没啥太大帮助,而且在不用这些字段写出的SQL语句既然过了(就说妙不妙,hh)。但后面仔细想了下,员工表的dept_emp的from_dateto_date其实是任职时间段,只有当to_date9999-01-01即为在职

每个部门最高:那么意味着要通过dept_no字段分组,在通过比较salary字段获取最大值

dept_no升序:这个最快理解啦,就是用order by dept_no就完事啦~

理清楚需求标识之后,那么就开始写SQL语句啦

(1)我们先从每个部门最高这个标识下手。此时我们先不考虑该员工是否在职哈

因为dept_nosalary分别在不同的表,且每个员工都有一条对应的薪水信息,因此用连接先行关联起来(left / right join

select
		a.emp_no,
		dept_no,
		salary,
	from dept_emp as a
	left join salaries as b using(emp_no)

然后我们就得考虑怎么取每个部门的最大薪水啦,这里就用到了刚刚提到的窗口函数之排序接口啦,这里罗列出三个常用的排序窗口接口

row_number (按顺序编号——1,2,3,4,5

rank(按照规则排名。遇到同分,它是跳跃的、间断的排名,例如两个并列第一名后,下一个是第三名——1,2,2,4,5

dense_rank(按照规则排名。排序数字是连续的、不间断。当有相同的分数时,它们的排名结果是并列的——1,2,2,3,4

这里我们用哪个都可以,hh,我选用的是row_number

select
		a.emp_no,
		dept_no,
		salary,
		ROW_NUMBER() over(partition by dept_no order by salary desc) as sal_idx
	from dept_emp as a
	left join salaries as b using(emp_no)

稍微说明下窗口函数的作用,它是通过dept_no分组然后在组内从大到小对salary进行排序,最后贴上编号作为一个临时字段

这样我们就很清楚知道每个部门内各个员工薪水的排名啦~

至此第一个红色标识完成啦

(2)我们接着解决当前这个红色标识

其实在(1)的SQL语句中添加即可

where a.date = '9999-01-01'

(3)最后只剩下dept_no升序这个红色标识啦

在(1)那里留下了一个问题,即还未取出每个部门薪水最高的员工信息,我们在这里完结

方案是(1)和(2)的SQL语句组装成临时表,当编号为1时便是每个部门薪水最高的员工啦。再加上order by 即可完结

最终代码如下:

select
	dept_no,
	emp_no,
	salary
from(
	select
		a.emp_no,
		dept_no,
		salary,
		ROW_NUMBER() over(partition by dept_no order by salary desc) as sal_idx
	from dept_emp as a
	left join salaries as b using(emp_no)
	where a.to_date = '9999-01-01'
) as t
where sal_idx = 1
order by dept_no 

全部评论

相关推荐

03-12 15:35
嘉应学院 Python
快说谢谢牛牛精灵:说不定就是下一个寒武纪!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10911次浏览 93人参与
# 你的实习产出是真实的还是包装的? #
1938次浏览 42人参与
# MiniMax求职进展汇总 #
24095次浏览 309人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7621次浏览 43人参与
# 简历第一个项目做什么 #
31729次浏览 339人参与
# 重来一次,我还会选择这个专业吗 #
433520次浏览 3926人参与
# 米连集团26产品管培生项目 #
6014次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187185次浏览 1122人参与
# 牛客AI文生图 #
21445次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152429次浏览 888人参与
# 研究所笔面经互助 #
118956次浏览 577人参与
# 简历中的项目经历要怎么写? #
310324次浏览 4217人参与
# AI时代,哪些岗位最容易被淘汰 #
63764次浏览 826人参与
# 面试紧张时你会有什么表现? #
30508次浏览 188人参与
# 你今年的平均薪资是多少? #
213120次浏览 1039人参与
# 你怎么看待AI面试 #
180105次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64330次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76524次浏览 374人参与
# 我的求职精神状态 #
448113次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363477次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160665次浏览 1112人参与
# 校招笔试 #
471093次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务