今天无意中碰到一个很简单的计算逻辑,但是用hive想了一大会才实现。
示例表数据:
需求逻辑:
给每条记录追加一个字段,用于统计按照p1和p2字段分组后,每个组中的num的数目(去重后的count)。
示例结果:
Mysql 超级简单的一句:
1 2 3 4 5 6 7 | select id, num, p1, p2, count ( distinct num) over (PARTITION by p1,p2) as f from test_z; |
Hive里
会报distinct有问题,去掉的话,明显与要求逻辑不符合啊。
想了一会还是用 dense_rank 和 join 实现了。以后再发掘其他的简单方法吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | select b.id, b.num, b.p1, b.p2, a.f from ( select p1, p2, max (f) as f from ( select id, num, p1, p2, dense_rank() over (PARTITION by p1, p2 order by num) as f from test_z )a1 group by p1,p2 )a join test_z b on a.p1=b.p1 and a.p2=b.p2; |
上面的a表太复杂,还可以用简单的group by 和 count(distinct)把a表逻辑换了。
1 2 3 4 5 6 | select p1, p2, count ( distinct num) as f from test_z group by p1,p2 |
每天进步一点点
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 为什么UNIX使用init进程启动其他进程?