sql:消除具有相同值对的重复行

sycxhyv7  于 2021-06-26  发布在  Hive
关注(0)|答案(3)|浏览(317)

这个表有3个字段:

ProductA ProductB Count
XX       CC       2
CC       XX       2
ZZ       XX       3
XX       ZZ       3

我必须做一个sql查询,它允许我删除重复的行,即行xx cc 2和cc xx 2是两个重复的行,因为它们是同一对产品。
所以查询的结果必须是这样的:

ProductA ProductB Count
    XX       CC       2
    ZZ       XX       3
a0zr77ik

a0zr77ik1#

以下答案由@lad2025:::
获取复制产品:

select distinct greatest(producta,productb) p1,least(producta,productb) p2,count from tab3;

要删除重复的产品对,请执行以下操作:

delete from tab3
where (producta,productb) 
  not in (select distinct greatest(producta,productb) p1,least(producta,productb) p2 from tab3);
l3zydbqr

l3zydbqr2#

这个答案假设每一行都存在重复项,就像在示例数据中一样。基于这个假设,sql非常简单。如果放松这个假设,查询会更复杂一些。
要获得想要的结果,可以使用:

select t.*
from t
where productA < productB;

要删除多余的记录,这适用于示例数据:

delete from t
    where productB > productA;

如果这是由查询生成的结果集,则可能对查询进行了简单的调整,从而解决了问题。

elcex8rz

elcex8rz3#

你可以用 GREATEST/LEAST 要处理对,请执行以下操作:

SELECT DISTINCT GREATEST(ProductA, ProductB), LEAST(ProductA, ProductB), cnt
FROM tab

dbfiddle演示

相关问题