Redshift SQL实现:ID不唯一时拼接ID/X/Y生成NEW_ID
Redshift实现动态生成NEW_ID的SQL方案
直接用窗口函数+条件判断就能搞定,不用复杂的关联操作,完整SQL如下:
SELECT ID, X, Y, CASE -- ID唯一时直接取原ID作为NEW_ID WHEN COUNT(*) OVER(PARTITION BY ID) = 1 THEN ID::VARCHAR -- ID重复时用下划线拼接ID、X、Y ELSE CONCAT_WS('_', ID, X, Y) END AS NEW_ID FROM your_table_name; -- 替换成你的实际表名
关键说明:
- 用
COUNT(*) OVER(PARTITION BY ID)窗口函数,一行就能算出每个ID在表中的总出现次数,比你原来的子查询+JOIN写法更高效,无需额外关联表 - 选用
CONCAT_WS而非CONCAT:CONCAT_WS会自动用指定分隔符(这里是下划线)拼接参数,还能自动忽略空值,比直接写CONCAT(ID, '_', X, '_', Y)更健壮 - 把
ID转成VARCHAR:因为拼接后的NEW_ID是字符串类型,统一类型可避免隐式转换问题 - 完全适配Redshift语法,在Coginiti中可直接运行
内容的提问来源于stack exchange,提问作者Mez
相关产品推荐
相关产品推荐

