decode1
decode1函数实现if-then-else分支选择的功能。
命令格式
decode1(<expression>, <search>, <result>[, <search>, <result>]...[, <default>])
参数说明
|
参数 |
是否必选 |
参数类型 |
说明 |
|---|---|---|---|
|
expression |
是 |
所有数据类型。 |
要比较的表达式。 |
|
search |
是 |
与expression一致。 |
与expression进行比较的搜索项。 |
|
result |
是 |
所有数据类型。 |
search和expression的值匹配时的返回值。 |
|
default |
否 |
与result一致。 |
如果所有的搜索项都不匹配,则返回default值,如果未指定,则返回NULL。 |
返回值说明
result 和 default 为返回值,支持返回所有的数据类型。
- 如果匹配,返回result。
- 如果没有匹配,返回default。
- 如果没有指定default,返回NULL。
- 如果search选项有重复且匹配时,会返回第一个值。
示例代码
为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表salary,并添加数据,命令示例如下:
CREATE EXTERNAL TABLE IF NOT EXISTS salary ( dept_id STRING, -- 部门ID userid STRING, -- 员工ID sal INT -- 工资 ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION 'obs://your-bucket-name/dli/salary/';-- 【必填】替换为OBS桶路径(DLI外表时必须指定)
添加数据如下:
INSERT INTO salary VALUES
('d1','user1',1000),
('d1','user2',2000),
('d1','user3',3000),
('d2','user4',4000),
('d2','user5',5000),
('d3','user6',6000),
('d4','user7',7000),
('d5','user8',8000);
示例
返回每个部门的名称
当 dept_id 的值为d1时,返回DLI;值为d2时,返回MRS;其他场景返回Others。
select dept_id, decode1(dept_id, 'd1', 'DLI', 'd2', 'MRS', 'Others') as result from salary; GROUP BY dept_id; -- 按部门ID去重,确保每个部门仅返回一行
返回结果:
+-----+-------+ | dept_id| result| +-----+-------+ | d1| DLI| | d2| MRS| | d3| Others| | d4| Others| | d5| Others| +-----+-------+