使用hive中的rank / dense_rank查找每个部门的第二高薪

问题描述 投票:3回答:1

这是在采访中向我询问的两个问题,但唯一的条件是使用rank / dense_rank。

使用hive中的rank / dense_rank查找每个部门的第二高薪。

  1. 当每个部门有足够的记录时。
  2. 当少数部门只有1条记录时。

如果这是有效的,请指导我。如果是,那么同样的查询应该是什么。

hadoop hive hiveql rank dense-rank
1个回答
3
投票

如果您需要选择所有第二薪水员工,请使用

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。

© www.soinside.com 2019 - 2024. All rights reserved.