我的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
关键字,如果有的话?
为这样一个新手问题道歉。
任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
聚合似乎符合您的要求:
select rank, sum(cost) as cost, segment, max(description)
from t
group by rank, segment;
这会在数据中为每个segment
/ rank
组合返回一行。