使用 UNION 子句时增加一列
Increment a column when using a UNION clause
我有以下查询:
select row_number() over (order by 1) as id,"-1" AS StatusCode,"Not informed" AS StatusLibelle
union
select row_number() over (order by 1) as id,"0" AS StatusCode,"Off" AS StatusLibelle
union
select row_number() over (order by 1) as id,"1" AS StatusCode,"On" AS StatusLibelle
当我尝试在 hive 上查询它时,我得到以下结果
id StatusCode StatusLibelle
1 -1 Not informed
1 0 Off
1 1 On
这是我的预期输出,id 列应该递增:
id StatusCosqlde StatusLibelle
1 -1 Not informed
2 0 Off
3 1 On
尝试以下操作:
select row_number() over (order by 1) as id,"-1" AS StatusCode,"Not informed" AS StatusLibelle
union
select row_number() over (order by 1) + 1 as id,"0" AS StatusCode,"Off" AS StatusLibelle
union
select row_number() over (order by 1) + 2 as id,"1" AS StatusCode,"On" AS StatusLibelle
为什么要使用 row_number()
?
select 1 as id, -1 AS StatusCode, 'Not informed' AS StatusLibelle
union all
select 2 as id, 0 AS StatusCode, 'Off' AS StatusLibelle
union all
select 3 as id, 1 AS StatusCode, 'On' AS StatusLibelle
此外,没有理由使用 UNION
,这会产生删除重复项的开销。而且,StatusCode
看起来像一个数字,所以 return 它是一个数字,而不是字符串。
我有以下查询:
select row_number() over (order by 1) as id,"-1" AS StatusCode,"Not informed" AS StatusLibelle
union
select row_number() over (order by 1) as id,"0" AS StatusCode,"Off" AS StatusLibelle
union
select row_number() over (order by 1) as id,"1" AS StatusCode,"On" AS StatusLibelle
当我尝试在 hive 上查询它时,我得到以下结果
id StatusCode StatusLibelle
1 -1 Not informed
1 0 Off
1 1 On
这是我的预期输出,id 列应该递增:
id StatusCosqlde StatusLibelle
1 -1 Not informed
2 0 Off
3 1 On
尝试以下操作:
select row_number() over (order by 1) as id,"-1" AS StatusCode,"Not informed" AS StatusLibelle
union
select row_number() over (order by 1) + 1 as id,"0" AS StatusCode,"Off" AS StatusLibelle
union
select row_number() over (order by 1) + 2 as id,"1" AS StatusCode,"On" AS StatusLibelle
为什么要使用 row_number()
?
select 1 as id, -1 AS StatusCode, 'Not informed' AS StatusLibelle
union all
select 2 as id, 0 AS StatusCode, 'Off' AS StatusLibelle
union all
select 3 as id, 1 AS StatusCode, 'On' AS StatusLibelle
此外,没有理由使用 UNION
,这会产生删除重复项的开销。而且,StatusCode
看起来像一个数字,所以 return 它是一个数字,而不是字符串。