V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
elone
V2EX  ›  PostgreSQL

请问一下 postgresql 如何删除重复数据项?

  •  
  •   elone · 161 天前 · 804 次点击
    这是一个创建于 161 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我现在手上有一张大表,600 万的数据吧。但是里面一半是重复的。

    column 是这样的

    id,column1 ,column2

    但是每一项的数据都是重复的,比如

    select * from testtable ; 
    
    ==>
      
      id ,column1,column2 
      1, name1, 数据 1
      1, name1, 数据 22222
    
    

    因为原先的 id 没有设置唯一约束,导致出现的这么多重复项, id ,column1 内容都是一样的,但是 column2 就不一样了。

    怎么样可以保留 column2 字数比较多的那一项,另一项删除掉?

    不知道我有没有表述清楚,请大家见谅。

    3 条回复    2021-06-29 19:39:06 +08:00
    hqs0417
        1
    hqs0417  
       161 天前   ❤️ 1
    select *, ROW_NUMBER() over (PARTITION by id order by len(column2) desc) as row_n
    from testtable


    结果是
    id ,column1,column2 , row
    1, name1, 数据 2222, 0
    1, name1, 数据 1, 1

    row 是 0 的就是要保留的数据
    zydxn
        2
    zydxn  
       161 天前   ❤️ 1
    delete t2
    from testtable t1
    join testtable t2 on t2.id = t1.id
    where CHAR_LENGTH(t2.column2) < CHAR_LENGTH(t1.column2);
    elone
        3
    elone  
    OP
       161 天前
    感谢 两位 . @zydxn @hqs0417
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3871 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 07:16 · PVG 15:16 · LAX 23:16 · JFK 02:16
    ♥ Do have faith in what you're doing.