【问题标题】:Group by in hive with CASE使用 CASE 在 Hive 中分组
【发布时间】:2025-12-14 22:05:02
【问题描述】:

有没有办法使用查询在 hive 中获得预期的输出?

select (CASE WHEN visit=1 THEN 'ONE' WHEN visit=2 THEN 'TWO' ELSE 'ABOVE_TWO' END),
count(visit) from sample_tbl 
group by (CASE WHEN visit=1 THEN 'ONE' WHEN visit=2 THEN 'TWO' ELSE 'ABOVE_TWO' END);

sample_tbl

访问

1

1

3

3

输出

一个 2

ABOVE_TWO 2

预期

一个 2

两个0

ABOVE_TWO 2

【问题讨论】:

    标签: group-by hive case


    【解决方案1】:

    我不是蜂巢专家,但你可以试试:

    select
       CASE WHEN visit=1 
               THEN 'ONE' 
            WHEN visit=2 
               THEN 'TWO'
            ELSE 'ABOVE_TWO' 
       END as visit,
       cnt
    from
    (
        select visit, count(*) as cnt
        from sample_tbl
        group by visit
    )s
    

    【讨论】:

      【解决方案2】:

      select case visit when 1 then 'ONE' when 2 then 'TWO' else 'ABOVE_TWO' end as visit,count(visit) from sample_tbl GROUP BY visit;

      【讨论】:

      • 有客户表可用,访问列包含客户访问商店的次数。我们需要将数据提取为客户访问商店的次数,并需要绘制条形图。因此,当我们提取数据时,如果没有可用于特定场景的数据(包含在查询的 switch case 中),它应该显示为“0”。我们可以通过代码来处理这个问题。但我需要通过查询来处理这个问题的解决方案。