【问题标题】:HiveQL - Grouping CountHiveQL - 分组计数
【发布时间】:2020-03-03 11:16:49
【问题描述】:

我是这里的新手,在 HiveQL 中仍然面临很多问题,需要向大家咨询。我有一个名为 Vote Table 的表格,我想计算 A、B、C、D 的“是”票(抱歉,我无法发布图片,所以我将其作为链接发送)。

Vote_table

但在这里我只想将 A1,A2,A3,A4 的计数加在一起;对于 B,C 仍将单独计算。我期望的输出是

Result_table

我试过的是

select
type,
count(
  case 
          when type = 'A1' and vote = 'yes' then 1
          when type = 'A2' and vote = 'yes' then 1
          when type = 'A3' and vote = 'yes' then 1
          when type = 'A4' and vote = 'yes' then 1
          else vote = 'yes' then 1
)
from vote_table
where …
group by type

我也试过这种方式

if (type in ('A1', 'A2', 'A3', 'A4') and vote = 'yes' then count(*) else (if (vote = 'yes' then count(*)))) as cnt_yes

但两者都不起作用。所以,我想咨询一下这里的专家,有没有更好的方法呢?谢谢!

【问题讨论】:

  • 请不要在问题标题中添加“SOLVED”。只需将答案标记为解决方案就足够了。
  • @NikosC。嗨尼科斯!好的,我知道了!感谢您的反馈!

标签: hive count grouping hiveql


【解决方案1】:

按计算类型分组:case when type in ('A1', 'A2', 'A3', 'A4') then 'A' else type end

select
      case when type in ('A1', 'A2', 'A3', 'A4') then 'A' else type end as type,
      sum(case when vote = 'yes' then 1 else 0 end)                     as number_of_vote
 from vote_table
where ...
group by case when type in ('A1', 'A2', 'A3', 'A4') then 'A' else type end

【讨论】:

  • 嗨!感谢您的回复,我正在尝试您的解决方案并等待结果,希望它对我有用!顺便说一句,我有一些小问题: 1. 如果在“case when”子句中我不使用“else 0”部分,会影响结果吗? 2.如果'sum'我把它改成'count',结果是一样的,对吧?抱歉,这些问题可能很愚蠢,但我只是想掌握一些基础知识,因为我还在学习它~谢谢~~
  • @Claire CASE 将返回 NULL,以防 vote!='yes' 并且 COUNT 将只计算不 NULL。如果所有投票均为“否”,则计数结果将为 NULL。您可能希望使用 NVL 等将结果 NULL 转换为 0。尽管对于您的确切数据集,它可以正常工作。
  • 啊!我懂了!非常感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
相关资源
最近更新 更多