case when语法:
case when 条件表达式 then 条件成立,结果1 else 条件不成立,结果2 end
单个条件:
case when … then…end结构:如果不写else,那么除了符合when条件之外的数据,其他数据默认为NULL 案例:
spark-sql> select
> user_id,
> name,
> case when address='shanghai' then '上海' end as address
> from test.test8;
1 xiaoming 上海
2 xiaolan NULL
Time taken: 0.219 seconds, Fetched 2 row(s)
case when … then…else…end结构: 案例:
spark-sql> select
> user_id,
> name,
> case when address='shanghai' then '上海' else '其他' end as address
> from test.test8;
1 xiaoming 上海
2 xiaolan 其他
Time taken: 0.396 seconds, Fetched 2 row(s)
多个条件:
case when … then…when…then…else…end结构: 案例:
spark-sql> select
> user_id,
> name,
> case when address='shanghai' then '上海'
> when address='beijing' then '北京'
> else '其他'
> end as address
> from test.test8;
1 xiaoming 上海
2 xiaolan 北京
Time taken: 4.57 seconds, Fetched 2 row(s)
case when嵌套结构: case when…then…case when…then…else…end when…then…case when…then…else…end else…end结构: 案例:
spark-sql> select
> user_id,
> name,
> case
> when name='xiaoming'
> then
> case when address='shanghai' then '上海' else '其他' end
> when name='xiaolan'
> then
> case when address='beijing' then '北京' else '其他' end
> else '其他' end as address
> from test.test8;
1 xiaoming 上海
2 xiaolan 北京
3 xiaohong 其他
Time taken: 1.072 seconds, Fetched 3 row(s)
if语法:
if(条件表达式,条件成立-结果1,条件不成立-结果2)
单个条件:
if(条件,结果1,结果2)结构: 案例:
spark-sql> select
> user_id,
> name,
> address,
> if(address='shanghai','上海','其他') as address_name
> from test.test8;
1 xiaoming shanghai 上海
2 xiaolan beijing 其他
3 xiaohong guangzhou 其他
Time taken: 11.957 seconds, Fetched 3 row(s)
多个条件:
if嵌套结构: if(if(条件,结果1,结果2),结果1,结果2)
spark-sql> select
> user_id,
> name,
> address,
> if(name='xiaoming',if(address='shanghai','上海','其他'),'其他') as address_name
> from test.test8;
1 xiaoming shanghai 上海
2 xiaolan beijing 其他
3 xiaohong guangzhou 其他
Time taken: 5.452 seconds, Fetched 3 row(s)
if和case when混合使用:
if(条件,case when…then…end,结果2)结构: 案例:
spark-sql> select
> user_id,
> name,
> address,
> if(name='xiaoming',
> case when address='shanghai' then '上海' else '其他' end,
> '其他') as address_name
> from test.test8;
1 xiaoming shanghai 上海
2 xiaolan beijing 其他
3 xiaohong guangzhou 其他
Time taken: 12.791 seconds, Fetched 3 row(s)
注:if、case when可以多重嵌套使用,只要自己用的舒服,满足使用场景,怎么用都可以
|