distinct去重在用in实在是不好用啊,速度堪忧!
根据字段去重。
根据 id和sex 字段去除重复的行,并获取其它的列:
select id,name,sex,a.* from(
select a.*,row_number() over(partition by a.id,a.sex order by name) su from test a )
where su=1
其中,partition by a.id,a.sex order by name是根据id和sex分组后,通过name排序。
row_number() 则是表示分组后,组内各行排序后的序号(su)。
所以su=1就是获取分组后的第一个序号。
即通过id和sex分组后,各组在通过name进行内部的排序,在获取各组序号为“1”的对象,以此来去重。
所以,
1、去除重复行,su=1。同过可以通过“order by name”这个语句块来控制重复时获取的行规则。即,重复时,order by name,获取name最小的那行,order by name desc获取的是name最大的那行。
2、获取重复数据的第二行,su=2。
3、获取重复数据的第n行,用su=n。即,获取重复数据中,通过order by name排序后,选择顺序为n的行。
oracle去重,根据列去重,字段去重。
最新推荐文章于 2025-07-16 10:32:24 发布
