oracle去重,根据列去重,字段去重。

xiaoxiao2025-10-17  7

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的行。

转载请注明原文地址: https://www.6miu.com/read-5038095.html

最新回复(0)