ITPub博客

首页 > 数据库 > Oracle > 一道SQL题

一道SQL题

原创 Oracle 作者:壹頁書 时间:2014-03-04 16:44:34 0 删除 编辑
王工出的一道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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    621
  • 访问量
    5991854