hive 运行sql报错Expression Not In Group By Key
案例:
Select tmp.username,date,sum(tmp.su) over(partition by tmp.username order by tmp.date ) totle From ( Select username,sum(cost_money) su,date From table_test1 Group by date,username ) tmp Group by tmp.date,tmp.username Order by tmp.username;
mysql运行结果:
hive提示:Semantic Exception: Line 1:24 Expression not in GROUP BY key 'su' (state=42000,code=40000)
原因:1.Hive不允许直接访问非group by字段;
解决:
1.对于非group by字段,可以用Hive的collect_set函数收集这些字段,返回一个数组;使用数字下标,可以直接访问数组中的元素,比如:collect_set(username)[0];
2. first() 函数;注:first() 函数是分组第一个元素,与之对应的还有 last(),是分组最后一个元素。
也可以直接将字段放入group by中:
Select tmp.username,date,sum(tmp.su) over(partition by tmp.username order by tmp.date ) totle From ( Select username,sum(cost_money) su,date From table_test1 Group by date,username ) tmp Group by tmp.date,tmp.username,su Order by tmp.username;
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记录一次线上服务OOM排查
· Linux实时系统Xenomai宕机问题的深度定位过程
· 记一次 .NET某汗液测试机系统 崩溃分析
· 深度解析Mamba与状态空间模型:一图带你轻松入门
· 记一次 .NET某电商医药网站 CPU爆高分析
· 2024年终总结 : 迷茫, 尝试突破, 内耗, 释怀
· 开源商业化 Sealos 如何做到月入 160万
· 《花100块做个摸鱼小网站! 》番外篇—小网站竟然让我赚到钱了
· 2025你好
· Coravel:一个可轻松实现任务调度、队列、邮件发送的开源项目