不区分大小写的重复数据删除行(雪花) [英] Dedup rows with case insensitive (Snowflake)
本文介绍了不区分大小写的重复数据删除行(雪花)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我希望在有多个实例时对行执行重复数据删除。
原表:
ID | 名称 |
---|---|
1 | 苹果 |
2 | 香蕉 |
1 | 苹果 |
2 | 苹果 |
3 | 香蕉 |
重复数据删除后的期望输出(有多个案例时按小写优先):
ID | 名称 |
---|---|
2 | 香蕉 |
1 | 苹果 |
2 | 苹果 |
3 | 香蕉 |
以下语句仅适用于GROUP BY ID。因此,ID 2";Apple";和ID 3";banana";停留&q;不是所需的。
create table DELETE2 as select ID, max(Name) as Name
FROM TEST."PUBLIC"."DELETE1"
group by ID, lower(Name);
drop table DELETE1;
alter table DELETE2 rename to DELETE1;
推荐答案
可以粘贴到Snowflake中运行的工作SQL:
技术.将所有单词转换为字符数组->;将每个字符转换为ascii…和ASCII。小写字母的ASCII比大写字母高。
with cte as (
select 1 ID, 'Apple' name
union select 2 ID, 'Banana' name
union select 1 ID, 'apple' name
union select 2 ID, 'APPLE' name
union select 3 ID, 'BANANA' name ),
lu as (
select
name,
lower (name) lu_name,
sum(ascii(a.value :: string)) ac,
max(ac) over (partition by lower(name)) mac,
iff ( max(ac) over (partition by lower(name)) = sum(ascii(a.value :: string)),name, null) g
from
cte,
lateral flatten(
input => split(regexp_replace(name, '.', ',\0', 2), ',')
) a
group by 1,2
)
select
cte.id, lu.name
from
cte
left outer join lu on lower(cte.name) = lu.lu_name and lu.g is not null
group by 1, 2
这篇关于不区分大小写的重复数据删除行(雪花)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文