You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive使用UNION子句查询时如何实现id列自动递增

问题原因

你当前写法的问题是,row_number() 窗口函数是在每个union的独立子查询中分别计算的,每个子查询仅返回1条数据,所以每个分支计算出的id都是1,合并后自然出现重复。

解决方案

先把所有状态数据合并,再对合并后的整体结果集计算自增id即可,正确的SQL如下:

select 
  row_number() over (order by StatusCode) as id,
  StatusCode,
  StatusLibelle
from (
  select "-1" AS StatusCode,"Not informed" AS StatusLibelle
  union all
  select "0" AS StatusCode,"Off" AS StatusLibelle
  union all
  select "1" AS StatusCode,"On" AS StatusLibelle
) t

补充说明:这里用union all代替union性能更好,因为三个分支数据本身没有重复,不需要union的去重逻辑。窗口函数的order by可以根据你需要的排序规则调整,示例中按StatusCode排序正好匹配你期望的输出顺序。

内容的提问来源于stack exchange,提问作者Martin James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:00:07