如题,下面这道题想了很久,弄不出来,特来请教,顺便问一下什么叫做相关子查询,我一直糊涂在这个问题上,想象不出来先描述下这个问题吧 已知表结构和数据如下:
我想通过oracle sql查询得到下面的结果,怎么写呢创表脚本是:create table test1
(id int primary key,
name varchar(20),
money int
);insert into test1 values(1,'Tom',1000);
insert into test1 values(2,'Mary',2000);
insert into test1 values(3,'Mike',3000);
insert into test1 values(4,'Jeff',4000);
求救

解决方案 »

  1.   

    SELECT ID,NAME,MONEY,(SELECT MONEY FROM TEST1  WHERE ID=T1.ID-1)MONEY1  FROM TEST1 T1;ID NAME MONEY MONEY1
     1 Tom   1000       
     2 Mary  2000   1000
     3 Mike  3000   2000
     4 Jeff  4000   3000
      

  2.   

     select id,name,money,lag(money) over(order by id) money1 from test1
      

  3.   

    lag(.) over(partition by . order by .)
    根据分组排序获取该字段上一行的值 partition by可不要 但是order by必须有.
      

  4.   

    非常感谢你的答案,等会给分你,能否给我以生动的方式帮助理解一下相关子查询呢,thanks
      

  5.   

    ①相关子查询指子查询中引用了外部查询的列,如本例中的 WHERE ID=T1.ID-1,T1.ID就是外部查询的列
    ②非相关子查询指子查询可以独立的执行,与外部查询的列无关,
    如:SELECT ID,NAME,MONEY,(SELECT MONEY FROM TEST1  WHERE ID IN('1','2','3','4'))MONEY1  FROM TEST1 T1;
    这里的子查询SELECT MONEY FROM TEST1  WHERE ID IN('1','2','3','4')可以独立执行与外部查询无关。