Hive 报错: Expression not in GROUP BY key ‘xxx‘

报错信息: Expression not in GROUP BY key ‘xxx’
报错含义: 字段 ‘xxx’ 没有在 group by 中

产生原因:
某些字段 ‘xxx’, 在 select 后的字段中出现, 却没有在 group by 后的字段中出现;
如下 sql 会报错, 因为, c 字段没有出现在 group by 后面

select  a, b, c from table_a 
group by a, b

Hive 编程指南中指出 :

GROUP BY 语句通常会和聚合函数一起使用,按照一个或者多个列对结果进行分组,然后对每个组执行聚合操作.

在 SELECT 子句中出现的字段或属性,如果不是在聚合函数中,那就必须要放到 GROUP BY 子句里面去,反过来,没有出现在 GROUP BY 子句中的字段或属性,只能在聚合函数中

用自己的话总结概括一下就是, Hive 中所有 select 后面非聚合函数字段, 都要出现在 group by 后面.(这也是 Hive 与 MySql 的一个小区别)

修改方式:
1⃣️ 将出现在 select 后面, 却没有出现在 group by 后面的字段, 使用聚合函数包裹起来( count, sum 等普通聚合函数, 或 Hive 中高级聚合函数 collect_set 等…)

select  a, b, sum(c) from table_a 
group by a, b

2⃣️ 将出现在 select 后面, 却没有出现在 group by 后面的字段, 添加到 group by 后面

select  a, b, c from table_a 
group by a, b, c

根据对应业务进行相应修改即可

另, 使用 group by 需要注意别名问题, 由于 sql 执行顺序: group by 在 select 之前(废话,肯定是先分组最后再 select 出来), 所以 group by 后面不能加别名
如下 sql 会报错:

select  a , b, ccc as C字段 from table_a 
group by a, b, C字段

需要修改为:

select  a , b, ccc as C字段 from table_a 
group by a, b, ccc

其实也就是将 group by 后的结果集当成一张表, 那你 select 一张表, 肯定是取表中的原字段再给它起别名, 简单注意下就行.

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值