一、空字段赋值
1、函数说明
NVL:给值为NULL的数据赋值,它的格式是NVL(value,default_value)。它的功能是如果value为NULL,则NVL函数返回的defalt_value。否则返回value的值。如果两个参数为NULL,则返回NULL。
2、案例实测
-- 查询:如果员工的comm为NULL,则用-1代替 select comm , nvl(comm,-1) from emp; -- 如果员工的comm为NULL,则用领导ID代替 select comm , nvl(comm,mgr) from emp;
二、Case When
1、数据准备
name | dept_id | sex |
悟空 | A | 男 |
大海 |
B | 男 |
大熊 | A | 男 |
老四 | A | 男 |
阿梅 | B |
女 |
凤姐 | B | 女 |
2、需求
求出各部门男女各有多少人
select dept_id, sum(case sex when '男' then 1 else 0 end) man_count, sum(case sex when '女' then 1 else 0 end) man_count from emp_sex group by dept_id;
三、行转列
1、函数说明
Concat(str1,str2,.....) 返回字符串链接后的结果,支持输入任意个字符串。
注意:输入参数为NULL的时候,返回NULL
Concat_ws(separator,str1,star2,....) :是一个特殊形式的Concat()函数,第一个参数是分隔符,后边是要进行拼接的字符串。
注意:输入参数为NULL不影响,连接符号为NULL,返回值为NULL。
collect_set(col): 函数只接受基本数据类型,主要作用是将某个字段的值进行去重汇总,产生array类型的字段。
2、数据准备
name | constellation | blood_type |
老四 | 白羊座 | A |
凡凡 | 射手座 | B |
雯雯 | 白羊座 | B |
小丽 | 白羊座 | A |
大伟 | 射手座 | B |
大山 | 射手座 | A |
3、需求
把星座和血型一样的人归类到一起。结果如下
白羊座,A 老四|小丽
白羊座,B 雯雯
射手座,A 大山
射手座,B 凡凡|大伟
4、SQL
select t1.base, concat_ws('|',collect_set(t1.name))name from (select name, concat(constellaction,',' ,boold_type)base from
person_info)t1;
四、列转行
1、函数说明
explode(col):将hive一列中复杂 的Array或者map拆分为多行。
lateral view
用法: lateral view udtf(expression) tableAlias AS colunAlias;
五、窗口函数(开窗函数)
六、Rank