SQL - 根据某些列而不是其他列删除重复项

时间:2016-03-15 21:55:50

标签: sql

我真的不知道如何清楚地说出这个问题,所以也许我会用一个例子:

Column1    Column2   Column3
A          100       239.1
A          100       0
A          101       191.3
B          99        0
B          99        12.43

我希望能够看到哪些副本仅与column1和column2有关,然后根据它们在column3中的值来比较这些重复项,并删除具有0的那些重复项。

所以我的结果表看起来像是:

    Column1    Column2   Column3
    A          100       239.1
    A          101       191.3
    B          99        12.43

我不完全确定如何做到这一点,任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

您可能正在寻找GROUP BY子句

Select column1, column2, SUM(column3) as col3 GROUP BY column2; 

答案 1 :(得分:0)

您需要将表连接到自身,例如(如果表格被称为“数字”)

NoMethodError: undefined method admin?' for nil:NilClass

以及当您感到满意时对删除的更改会找到要删除的行...

答案 2 :(得分:0)

根据您的数据,您只需DELETE FROM tab WHERE column3 = 0,但这可能过于简化了。

这将检查0中的<> 0和其他行column3

select *
from tab as t1
where column3 = 0
and exists
 ( 
   select *
   from tab as t2
   where t1.column1 = t2.column1
     and t1.column2 = t2.column2
     and t2.column3 <> 0
 )

如果返回正确的行,只需更改为DELETE

答案 3 :(得分:0)

视图行应该起作用

选择col1,col2,col3 FROM yourtable t WHERE col3&gt; 0 OR(col1,col2)NOT IN(SELECT col1,col2 FROM yourtable t2 WHERE col3&gt; 0 AND t.col1 = t2.col1和t。 col2 = t2.col2)

如果你喜欢删除那些行尝试

从yourtable删除t WHERE col3 = 0 AND(col1,col2)= ANY(SELECT col1,col2 FROM yourtable t2 WHERE col3&gt; 0 AND t.col1 = t2.col1 and t.col2 = t2.col2 )