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

时间:2019-03-18 11:48:51

标签: hadoop hive hiveql rank dense-rank

这是面试中问我的两个问题,但唯一的条件是使用等级/密集等级。

  

使用rank / dense_rank查找每个部门的第二高薪水   蜂巢。

     
      
  1. 每个部门都有足够的记录。
  2.   
  3. 几个部门只有1条记录时。
  4.   

请指导我是否有效。 如果是,那么对相同内容的查询应该是什么。

1 个答案:

答案 0 :(得分:2)

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

dense_rank() over(partition by department order by salary desc) = 2过滤器。它将返回所有具有第二个薪水的员工。

如果部门中只有1条记录(不存在第二份薪水,部门中只有一名员工),则该记录将排名1,并且该部门的记录也不会被density_rank = 2过滤。

如果您只需要选择一个具有第二薪水的记录(不是所有雇员),那么row_number() over(partition by department order by salary desc) = 2将起作用,但是如果有很多具有第二薪水的雇员,它将随机选择一个具有第二薪水的雇员。只有一个记录将被标记为row_number = 2。