group by能够查询的字段

如果hive语句中有group by语句,那么select语句中只会有三种可查询的字段或者说情况:

1、分组组名

2、聚合函数

3、常量

只能是这三种的一个或者多个的组合,否则报错。(分组后的每组只会有一行数据,故只能对每组的数据由多到一的转变)

PS:

1.标量函数

分组组名不仅仅是group by的字段,还可以是各种分组字段的标量函数,比如concat(),data_format(),什么都可以,但只能用分组后的字段。

2.开窗函数

开窗函数并不是所有的都满足可以运行的条件,字段参数才是决定能否运行的关键,该开窗函数中的所有字段:开窗字段partition by的字段,以及order by的字段,都是要在group by筛选后的字段之中才能使用。例如:

select 
    creator,    -- 出单人
    count(*),    -- 每个保费出单量
    total_premium,    -- 该保费
    sum(total_premium) over(partition by creator order by gmt_create) as sum_premium
    -- 这个窗口函数运行会报错,因为gmt_create字段找不到,没在group by中
from dwd_policy_info 
where pt='20221215'
group by creator,total_premium    -- 获取保费及出单人
;

准确说上面这段代码,重新根据执行顺序翻译一下应该如下

from dwd_policy_info 
where pt='20221215'
group by creator,total_premium    -- 获取保费及出单人
select 
    creator,    -- 出单人
    count(*),    -- 每个保费出单量
    total_premium,    -- 该保费
    sum(total_premium) over(partition by creator order by gmt_create) as sum_premium
    -- 这个窗口函数运行会报错,因为gmt_create字段找不到,没在group by中
;

这样看应该比较明显,在group by筛选后,字段只有creator与total_premium了,因此select中只能携带这两个字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值