在Impala中划分具有不同类别的行数

时间:2017-02-01 10:57:09

标签: sql view hive aggregate-functions impala

您好我有这样的表格,并希望构建视图以获取每种类型的总和(计数)。
对于每种类型,我想将" cat"中的计数总和除以NULL。 " cat"

中的非空值计数总和

这是我的查询,它给我不正确的结果(我想因为我需要先计算总数,但我很难这样做)

select case   
    When protocol = 61002 AND type= 3 THEN   "S11 Success Rate" 
    When protocol= 61002 AND type = 4 THEN   "S11 Bearer Success Rate"  
end as name,  
max(case when cat is null then count end ) / nullif(max(case when cat is not null then count end),0) as result  
from table

使用此表:

enter image description here

类型3的期望结果是结果=(63 + 15456) / (51609 + 18127)= 0.2225

1 个答案:

答案 0 :(得分:1)

我觉得这就是你要找的东西:

select 
case
    When protocol = 61002 AND type = 3 THEN "S11 Success Rate" 
    When protocol = 61002 AND type = 4 THEN "S11 Bearer Success Rate"
end as name,
sum(case when cat is null then count else 0 end)/sum(case when cat is null then 0 else count end)
from table
group by name

这会产生以下结果:

  

S11成功率0.22253929104049558

     

S11承载成功率0.90956749672346004

分组确保您可以按类型进行汇总。 case语句在值不正确时将值设置为0。这会产生您期望的正确总和。