V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
elone

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

  •  
  •   elone · Jun 29, 2021 · 2454 views
    This topic created in 1765 days ago, the information mentioned may be changed or developed.

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

    column 是这样的

    id,column1 ,column2

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

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

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

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

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

    3 replies    2021-06-29 19:39:06 +08:00
    hqs0417
        1
    hqs0417  
       Jun 29, 2021   ❤️ 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 的就是要保留的数据
    Tsukihime
        2
    Tsukihime  
       Jun 29, 2021   ❤️ 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
       Jun 29, 2021
    感谢 两位 . @zydxn @hqs0417
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2769 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:36 · PVG 23:36 · LAX 08:36 · JFK 11:36
    ♥ Do have faith in what you're doing.