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

时间:2018-05-11 16:12:43

标签: sql hive

我的这个表包含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

3 个答案:

答案 0 :(得分:0)

您可以使用GREATEST/LEAST来处理对:

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

<强> DBFiddle Demo

答案 1 :(得分:0)

此答案假定每行都有重复项,如样本数据中所示。有了这个假设,SQL非常简单。如果放宽这个假设,查询会有点复杂。

要获得所需的结果,您可以使用:

select t.*
from t
where productA < productB;

要删除多余的记录,这适用于您的样本数据:

delete from t
    where productB > productA;

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

答案 2 :(得分:0)

以下答案由@ 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);