sql - Hive - 跨列/多行的最大值
问题描述
我的数据如下所示:
ip, category, a_score, b_score, c_score
1.2.3.4, X, 0, 5, 0
1.2.3.4, X, 3, 0, NULL
1.2.3.4, Y, 1, NULL, NULL
1.2.3.4, Y, 0, 2, 0
1.2.3.4, Z, 1, 0, 9
1.2.3.4, Z, 0, 2, 0
每个 IP 最多可以有 8 个类别和每个类别最多 3 个有效分数(a_score、b_score、c_score)。
对于每个 IP,我需要在该类别的所有分数中找到每个类别的最高分数。
所以在这种情况下,我会得到
1.2.3.4, X, 5
1.2.3.4, Y, 2
1.2.3.4, Z, 9
即,类别 X 的 a/b/c 分数的最大值是第一行的 c_score;Y 类的 a/b/c 分数的最大值是第二行的 b_score;类别 Z 的 a/b/c 分数的最大值是第一行的 c_score。
我尝试了一些东西
select ip, category, greatest(max(a_score), max(b_score), max(c_score)) from mytable where ip = '1.2.3.4' group by ip, category;
但这仅返回 NULL。
我该怎么办?TIA。
解决方案
coalesce
与0
(零)一起使用:
select ip, category,
max(greatest(coalesce(a_score,0), coalesce(b_score,0), coalesce(c_score,0))) max_score
from mytable
where ip = '1.2.3.4'
group by ip, category;
推荐阅读
- javafx - 在运行时 JavaFx 上设置 TextField 提示文本
- ejabberd - Ejabberd 17.12 内存泄漏
- performance - 为什么 Iterable.sum() 在 Kotlin 中很慢?
- c# - 使用 0M 而不是 0 作为十进制值?
- sql - POSTGRESQL 限制给定条件的结果查询
- reactjs - 为 cookie 管理创建单独的反应组件
- javascript - 检查值等于数组中的特定值 - javascript
- ms-word - 通过 VBA 更新 WORD 2016 中图片的多个源链接
- excel - Excel VBA:如何在同一列中交换两个选定的单元格范围(不仅仅是两个值)?
- facebook - 从“自己的”Facebook 页面的时间线中阅读公开帖子 - Pages API 需要审核和业务验证