不区分大小写的重复数据删除行(雪花) [英] Dedup rows with case insensitive (Snowflake)

查看:19
本文介绍了不区分大小写的重复数据删除行(雪花)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望在有多个实例时对行执行重复数据删除。

原表:

ID 名称
1 苹果
2 香蕉
1 苹果
2 苹果
3 香蕉

重复数据删除后的期望输出(有多个案例时按小写优先):

ID 名称
2 香蕉
1 苹果
2 苹果
3 香蕉
已删除ID%1";Apple";,因为ID%1";Apple";存在。 ID 2&苹果变成了&苹果,因为有ID 1&苹果。 ID 3";banana";变成了";banana";,因为小写是优先的。

以下语句仅适用于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比大写字母高。

没有更新.没有功能.只是普通的老式SQL;-)

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆