使用 hive 中的 rank/dense_rank 查找每个部门的第二高薪水
Posted
技术标签:
【中文标题】使用 hive 中的 rank/dense_rank 查找每个部门的第二高薪水【英文标题】:Find second highest salary in each department using rank/dense_rank in hive 【发布时间】:2019-08-08 18:44:21 【问题描述】:这是面试时问我的两个问题,但唯一的条件是使用 rank/dense_rank。
使用 rank/dense_rank 在每个部门中查找第二高的薪水 蜂巢。
当每个部门都有足够的记录时。 当少数部门只有 1 条记录时。
指导我这是否有效。 如果是,那么相同的查询应该是什么。
【问题讨论】:
how to get second highest salary department wise without using analytical functions?的可能重复 问题是使用分析函数(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。
【讨论】:
以上是关于使用 hive 中的 rank/dense_rank 查找每个部门的第二高薪水的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 sqoop 将 Mysql 中的所有表导入到 hive 中用于 hive 中的特定数据库?