按照语义正确的方法,你应该先group by和order by分数,然后再搞点花招,就可以让分数相同的人使用一样的排名了。你不应该有任何业务逻辑使得相同分数的人顺序上有差别会造成影响。
你应该说的是row_number()over 、rank()over和dense_rank()over这三种分析函数吧。后面两个就是可以存在并列的情况。 写法是 row_number()over(partition byorder by score),其他两个也一样
你是replace后排序的话,肯定不对,方法应该先按照/前的排序,再按照/后的排序。单纯是以上数据的话。
创建表,加入数据:
create table test(str varchar2(10))
insert into test values ('120/80');
insert into test values ('120/90');
insert into test values ('130/40');
insert into test values ('130/50');
insert into test values ('120/100');
insert into test values ('120/110');
commit;
执行:
select from test order by substr(str,1,3),to_number(substr(str,5,length(str)-instr(1,'/')-1))结果:
给分吧,没啥说的。
create table ldw_03_07(aaa varchar2(12));
insert into ldw_03_07 select '2' from dual;
insert into ldw_03_07 select '3' from dual;
insert into ldw_03_07 select '6' from dual;
insert into ldw_03_07 select '3+1' from dual;
commit;
select from ldw_03_07;--原始
select aaa from ldw_03_07 order by rpad(aaa,10,' ');--排序
以上就是关于oracle排序的几种方法全部的内容,包括:oracle排序的几种方法、oracle 字段中带/的排序、oracle 字符排序 我的 数据是 id value 1 2 2 6 3 3+1 4 3 我要根据name进行排序 顺序应该是 2,3,6,3+1等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)