这是在采访中向我询问的两个问题,但唯一的条件是使用rank / dense_rank。
使用hive中的rank / dense_rank查找每个部门的第二高薪。
- 当每个部门有足够的记录时。
- 当少数部门只有1条记录时。
如果这是有效的,请指导我。如果是,那么同样的查询应该是什么。
如果您需要选择所有第二薪水员工,请使用
dense_rank() over(partition by department order by salary desc) = 2
过滤器。它将返还所有员工的第二份工资。
如果部门中只有1条记录(没有第二个工资,部门中有一名员工),则它将被排名为1,并且您将不会获得该部门的记录,而不是由dense_rank = 2过滤。
如果您只需要选择一个具有第二个薪水的记录(不是所有员工),那么row_number() over(partition by department order by salary desc) = 2
将起作用,但如果有许多员工有第二个薪水,它会选择一个随机员工获得第二个薪水。只有一个记录将标记为row_number = 2。