单行变多行
假设有个表有两个字段
key val1_val2_val3_val4_val5想把第二个字段以“_”为分隔符切割成多行,如下:
key val1
key val2
key val3
key val4
key val5
第二个字段包含的“_”不确定
代码如下:
- select
- col1,
- col2_sub
- from (
- --以下替换成性感的原始表
- select
- 'key' as col1,
- 'val1_val2_val3_val4_val5' as col2
- from dual
- ) t
- lateral view explode(split(col2, '_')) result_table as col2_sub
reflect函数
reflect()函数可以使用java已有的函数,如
select reflect('java.lang.Math', 'sqrt', 4) from dual;
count函数
count函数在作统计运算时,会把空值(NULL)排除在外,利用这一特性,可以实现某些较为复杂的计数需求。
有如下数据(表名为booksource):
其中第14条记录的book字段值为空值(NULL)。我们的需求是,计算source=1的book有多少种(不重复)。实现的方式是count+distinct+case when组合,代码如下:
- select
- count(distinct case when source = 1 then book else null end) as num
- from booksource;
输出结果为4。