使用 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 中的特定数据库?

HIve的安装和使用

如何使用 Hive 上下文中的 Pyspark 调用用 Java 编写的 Hive UDF

hive中怎么删除表中的部分数据

hive中怎么删除表中的部分数据

Hive 中的增量更新