散分:一个特简单查询SQL的几种写法

阿三 2014-01-15 03:46:31
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
...全文
218 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿三 2014-01-18
  • 打赏
  • 举报
回复
第一个写错了,更正: SELECT a.id,a.value,SUM(nvl(b."VALUE",0)) FROM mytable A JOIN mytable b ON b.id<=a.id GROUP BY a.id,a.value 1,2结果是一样的,应该。 第三个确是我理解错了,巧合。
shenlele088 2014-01-16
  • 打赏
  • 举报
回复
大哥,你这个样本给的有问题呀?你的这三个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);

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧