一道SQL題

壹頁書發表於2014-03-04
王工出的一道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部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1100924/,如需轉載,請註明出處,否則將追究法律責任。

相關文章