首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

散分:一个特简单查询SQL的几种写法,该如何解决

2014-01-21 
散分:一个特简单查询SQL的几种写法CREATE TABLE mytable(ID INT,VALUE NUMBER(6))INSERT INTO mytable VA

散分:一个特简单查询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);

110
220
315

结果:
11010
31545
22040


你会几种?


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);

热点排行