王工出的一道SQL题
数据初始化:
create table t(a varchar2(10));
insert into t values('b');
insert into t values(null);
insert into t values(null);
insert into t values('a');
insert into t values('e');
insert into t values(null);
insert into t values('c');
insert into t values('d');
commit;

要求:给每一个不为null的元素编号,复杂度为O(n),结果应该如下

我当时的答案
select t3.a,decode(t3.a,null,null,num) R from
(
select t2.a,sum(t2.c) over(order by t2.r) num from
(
select rownum r,decode(t.a,null,null,1) c,a from t
) t2
) t3;
其中t2的视图如下

王工的答案:
select a,nvl2(a,count(a) over(order by rownum),'') r from t;
王工给出的MySQL处理方式
select a,replace( if(a='','',@b=@b+1)-1,-1,'') b from t where @b:=1;
在单位5.5的环境测试,这个语句通过了,但是在5.6下,这个语句不能给出正确答案。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1100924/
,如需转载,请注明出处,否则将追究法律责任。