日期:2014-05-16  浏览次数:20777 次

散分:一个特简单查询SQL的几种写法
CREATE TABLE mytable(ID INT,VALUE NUMBER(6));
INSERT INTO mytable VALUES(1,10);
INSERT INTO mytable VALUES(2,20);
INSERT INTO mytable VALUES(3,15);

1 10
2 20
3 15

结果:
1 10 10
3 15 45
2 20 40


你会几种?

CREATE TABLE mytable(ID INT,VALUE NUMBER(6));
INSERT INTO mytable VALUES(1,10);
INSERT INTO mytable VALUES(2,20);
INSERT INTO mytable VALUES(3,15);

SELECT * FROM mytable;

SELECT a.id,a.value,SUM(nvl(a."VALUE",0)) 
FROM mytable A
JOIN mytable b ON b.id<=a.id
GROUP BY a.id,a.value

SELECT ID,VALUE,SUM(VALUE) OVER(ORDER BY ID) FROM mytable;

SELECT ID,value+LAG(VALUE,1,0) OVER(ORDER BY ID) FROM mytable

------解决方案--------------------
大哥,你这个样本给的有问题呀?你的这三个sql的意义也不一样。只不过恰巧得数一样了而已。
1、
SELECT a.id,a.value,SUM(nvl(a."VALUE",0)) 
FROM mytable A
JOIN mytable b ON b.id<=a.id
GROUP BY a.id,a.value
这个相当于order by value后的value*rownum。
2、
SELECT ID,VALUE,SUM(VALUE) OVER(ORDER BY ID) FROM mytable;
是ORDER BY ID后,当前value之和。
3、SELECT ID,value+LAG(VALUE,1,0) OVER(ORDER BY ID) FROM mytable
是ORDER BY ID后,上一个value+现在的value。

你可以试试下面的样本。
INSERT INTO mytable VALUES(1,5);
INSERT INTO mytable VALUES(2,6);
INSERT INTO mytable VALUES(3,10);