作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Oracle 数据库中有一个表 abcd
+-------------+----------+
| abcd.speed | abcd.ab |
+-------------+----------+
| 4.0 | 2 |
| 4.0 | 2 |
| 7.0 | 2 |
| 7.0 | 2 |
| 8.0 | 1 |
+-------------+----------+
我正在使用这样的查询:
select min(speed) keep (dense_rank last order by abcd.ab NULLS FIRST) MOD from abcd;
我正在尝试将代码转换为 Hive,但看起来 keep
在 Hive 中不可用。
你能建议一个等效的陈述吗?
最佳答案
select -max(struct(ab,-speed)).col2 as mod
from abcd
;
+------+
| mod |
+------+
| 4.0 |
+------+
让我们开始解释 min(speed) keep (dense_rank last order by abcd.ab NULLS FIRST)
:找到 ab
最大值的行。
对于这个/那些行,找到 speed
的最小值。
我们在这里使用了 2 个技巧。
第一个是基于获取结构最大值的能力。max(struct(c1,c2,c3,...))
返回的结果与您按 c1
然后按 c2< 对结构排序的结果相同
,然后通过 c3
等,然后选择最后一个元素。
第二个技巧是使用-speed
(与-1*speed
相同)。找到 -speed
的最大值,然后减去该值(得到 speed
),与找到 speed
的最小值是一样的>.
如果我们对结构进行排序,它会看起来像这样(因为 2 大于 1 且 -4 大于 -7):
+----+-------+
| ab | speed |
+----+-------+
| 1 | -8.0 |
| 2 | -7.0 |
| 2 | -7.0 |
| 2 | -4.0 |
| 2 | -4.0 |
+----+-------+
本例中的最后一个结构在 struct(2,-4.0)
中,因此这是 max
函数的结果。
结构的字段名称是 col1
、col2
、col3
等,所以struct(2,-4.0).col2
是 -4.0
。并在它前面加上减号(与它乘以 -1 相同),如 -struct(2,-4.0).col2
是 4.0
。
关于oracle - 如何在Hive中实现Oracle的 "func(...) keep (dense_rank ...)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44385551/
我是一名优秀的程序员,十分优秀!