HiveSQL——借助聚合函数与case when行转列
一、条件函数
if 条件函数
if函数是最常用到的条件函数,其写法是if(x=n,a,b), x=n代表判断条件,如果x=n时,那么结果返回a ,否则返回b。
select
if(age < 25 or age is null, '25岁以下', '25岁以上') as age_cnt,
count(1) as number
from table1
group by age_cnt;
case when
case when 与if的作用基本相同,也是按照条件更换列中的内容,区别是case when 可以对 多个条件进行转换,需要注意的是:结尾需要加end作为结束标志
case 测试表达式
when 简单表达式1 then 结果表达式1
when 简单表达式2 then 结果表达式2
.......
when 健达表达式n then 结果表达式n
[else 结果表达式 n+1]
end
--举例:
select case when age <25 or age is null then '25岁以下'
else '25岁及以上'
end as age_cnt,
count(1) as number
from table1
group by age_cnt;
-- 举例:
select device_id,
gender,
case when age<20 then '20岁以下'
when age>=20 and age<=24 then '20-24岁'
when age>=25 then '25岁及以上'
else '其他'
end as age_cut
from table1;
二、运用案例
2.1 行转列
问题描述
数据准备
create table if not exists test
(
col1 string comment '',
col2 string comment '',
col3 string comment ''
) comment '测试表';
insert overwrite table test
values ('a','g','11'),
('a','f','23'),
('a','d','9'),
('b','g','5'),
('b','f','8'),
('b','d','47');
数据分析
利用case when 进行行转列
select
col1,
case col2 when 'g' then col3 else 0 end as g,
case col2 when 'f' then col3 else 0 end as f,
case col2 when 'd' then col3 else 0 end as d
from test;
最后,分组求max值即可
select
col1,
max(case col2 when 'g' then col3 else 0 end) as g,
max(case col2 when 'f' then col3 else 0 end) as f,
max(case col2 when 'd' then col3 else 0 end) as d
from test
group by col1;
最终的输出结果: