删除表中的空重复项

时间:2018-04-14 16:37:59

标签: mysql sql

我的table看起来像这样:

rank   cost    segment      description
 1       23      pen         2mm red pen
 2       22      pen         3mm red pen
 3       10      pen         4mm green pen
 3               pen                       
 4               pen         5mm red pen
 5               pen         1 mm yellow pen
 1       3      eraser       red eraser
 2       2      eraser       red eraser
 3       5      eraser       green eraser
 4              eraser
 4       6      eraser       red eraser
 5              eraser       yellow eraser

需要转换为:

 rank   cost    segment         description
     1       23      pen         2mm red pen
     2       22      pen         3mm red pen
     3       10      pen         4mm green pen
     4               pen         5mm red pen
     5               pen         1 mm yellow pen
     1       3      eraser        red eraser       
     2       2      eraser        red eraser
     3       5      eraser        green eraser
     4       6      eraser        red eraser
     5              eraser        yellow eraser

Note:来自细分rank 3的空pen和来自细分rank 4的{​​{1}}被移除。

我一直试图使用eraser来实现这一目标 但在这种情况下,select * from table where cost!=0也会被删除,因为它是空的。这是不希望的。

我希望保留所有排名,即使它在每个细分中都是空的,只想删除具有空rank 5值的细分中的重复排名。

我尝试了其他几种方法来实现这一目标但失败了。有没有更好的方法来实现这一目标?我可能需要使用cost或任何group by segment关键字,如果有的话?

为这样一个新手问题道歉。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

聚合似乎符合您的要求:

select rank, sum(cost) as cost, segment, max(description)
from t
group by rank, segment;

这会在数据中为每个segment / rank组合返回一行。