hive按组计算中值和平均值

dldeef67  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(704)

我有一个按州和县统计的数据集,我想按州和县计算中位数和平均数,例如:
拥有:

ID  state    county  count
1   MD       aa          2
2   MD       aa          4
3    VA        bb         1
4    VA        bb         2
5    VA        bb         4
6    VA        cc          7
7    VA        cc          8

想要:

到目前为止,给我带来错误的是:

Select id,  STATE,COUNTY,count,
percentile(cast(count as BIGINT), 0.5) OVER() as overall_median, 
round(avg(count),2) OVER() as overall_avg,

percentile(cast(count as bigint),0.5) OVER(PARTITION BY id,STATE) as med_state,
percentile(cast(count as bigint),0.5) as med_county,

AVG(count) OVER (PARTITION BY id, STATE) as avg_state,
AVG(count) AS avg_county,
from have
group by id, state, county

不使用组时收到错误:
错误:执行错误:org.apache.hive.service.cli.hivesqlexception:编译语句时出错:失败:semanticexception无法将窗口调用拆分为组。至少有一个组只能依赖于输入列。还要检查循环依赖项。基本错误:org.apache.hadoop.hive.ql.parse.semanticexception:行1:457表达式不在group by key“id”中
无组代码:

Select id,  STATE,county,count,
percentile(cast(count as BIGINT), 0.5) OVER() as overall_median, 
round(avg(count),2) OVER() as overall_avg,

percentile(cast(count as bigint),0.5) OVER(PARTITION BY id,STATE) as med_state,
percentile(cast(count as bigint),0.5) OVER(PARTITION BY id,STATE,county) as med_county,

AVG(count) OVER (PARTITION BY id, STATE) as avg_state,
AVG(count) OVER (PARTITION BY id, STATE, county) as avg_county,
from have

谢谢您!

b0zn9rqh

b0zn9rqh1#

修正:舍入(平均(count)over(),2)

select 
        id, STATE, county, count,
        percentile(cast(count as BIGINT), 0.5) OVER() as overall_median, 
        round(avg(count) OVER(), 2) as overall_avg,

        percentile(cast(count as bigint), 0.5) OVER(PARTITION BY id, STATE) as med_state,
        percentile(cast(count as bigint), 0.5) OVER(PARTITION BY id, STATE, county) as med_county,

        AVG(count) OVER (PARTITION BY id, STATE) as avg_state,
        AVG(count) OVER (PARTITION BY id, STATE, county) as avg_county
    from 
        have

小贴士:不要使用关键字(即count)作为列名-将来会有很多问题

相关问题