在hive中使用rank/dense\u rank查找每个部门的第二高工资

ymzxtsji  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(670)

这是面试时问我的两个问题,但唯一的条件是使用rank/u rank。
在hive中使用rank/dense\ rank查找每个部门的第二高工资。
当每个部门有足够的记录时。
当少数部门只有一个记录时。
告诉我这是否有效。如果是,那么对于相同的查询应该是什么。

djmepvbi

djmepvbi1#

如果您需要选择所有二等工资员工,则使用 dense_rank() over(partition by department order by salary desc) = 2 过滤器。它将以第二工资返还所有员工。
当部门中只有1条记录(不存在第二个薪资,部门中有一个员工)时,它将被排名为1,并且您将不会得到该部门的任何记录(按密集的\u rank=2筛选)。
如果您只需要选择一个记录(不是所有员工)和第二个工资,那么 row_number() over(partition by department order by salary desc) = 2 会起作用,但如果有多个员工拿第二份薪水,它会随机挑选一个拿第二份薪水的员工。只有一条记录将被标记为行号=2。

相关问题