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

2021-06-29 17:26:33 +08:00
 elone

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

column 是这样的

id,column1 ,column2

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

select * from testtable ; 

==>
  
  id ,column1,column2 
  1, name1, 数据 1
  1, name1, 数据 22222

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

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

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

1728 次点击
所在节点    PostgreSQL
3 条回复
hqs0417
2021-06-29 17:38:27 +08:00
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
2021-06-29 17:46:17 +08:00
delete t2
from testtable t1
join testtable t2 on t2.id = t1.id
where CHAR_LENGTH(t2.column2) < CHAR_LENGTH(t1.column2);
elone
2021-06-29 19:39:06 +08:00
感谢 两位 . @zydxn @hqs0417

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/786517

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX