SELECT a.*, SUM(s.amount) over(ORDER BY s.month rows unbounded preceding) AS a , SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows unbounded preceding) AS b, SUM(s.amount) over(PARTITION BY s.month ) AS c_1, SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN unbounded preceding AND unbounded following) AS c, SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN 1 preceding AND unbounded following) AS d, SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN 1 preceding AND 1 following) AS e, SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN unbounded preceding AND 1 following) AS f, SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows CURRENT ROW) AS g FROM all_sales s, (SELECT * FROM all_sales) a WHERE s.rowid = a.rowid;
/ - 上面的查询给出了下面显示的结果c_1和c列之间的区别。
YEAR MONTH PRD_TYPE_ID EMP_ID AMOUNT A B C_1 C D E F G 1 2006 1 1 21 1.00 1 1 10 10 10 3 3 1 2 2006 1 1 21 2.00 3 3 10 10 10 6 6 2 3 2005 1 2 21 3.00 6 6 10 10 9 9 10 3 4 2005 1 2 22 4.00 10 10 10 10 7 7 10 4 5 2006 2 1 21 5.00 15 5 11 11 11 11 11 5 6 2005 2 1 21 6.00 21 11 11 11 11 11 11 6 7 2005 3 1 21 21 7 7 7 7 7 8 2006 3 2 21 7.00 28 7 7 7 7 7 7 7 9 2005 4 1 21 8.00 36 8 17 17 17 17 17 8 10 2006 4 2 21 9.00 45 17 17 17 17 17 17 9 11 2006 5 2 21 45 10 10 10 10 10 12 2005 5 1 21 10.00 55 10 10 10 10 10 10 10 13 2006 6 1 21 11.00 66 11 23 23 23 23 23 11 14 2005 6 1 21 12.00 78 23 23 23 23 23 23 12 15 2005 7 2 21 13.00 91 13 27 27 27 27 27 13 16 2006 7 1 21 14.00 105 27 27 27 27 27 27 14 17 2005 8 2 21 15.00 120 15 31 31 31 31 31 15 18 2006 8 1 21 16.00 136 31 31 31 31 31 31 16 19 2005 9 2 21 17.00 153 17 35 35 35 35 35 17 20 2006 9 1 21 18.00 171 35 35 35 35 35 35 18 21 2005 10 2 21 19.00 190 19 39 39 39 39 39 19 22 2006 10 1 21 20.00 210 39 39 39 39 39 39 20 23 2006 11 1 21 21.00 231 21 43 43 43 43 43 21 24 2005 11 1 21 22.00 253 43 43 43 43 43 43 22 25 2006 12 2 21 23.00 276 23 47 47 47 47 47 23 26 2005 12 1 21 24.00 300 47 47 47 47 47 47 24
答案 0 :(得分:1)
你有相同的结果,因为你的陈述是同样的:
SUM(s.amount) over(PARTITION BY s.month ) AS c_1,
SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN unbounded preceding AND unbounded following) AS c
它的原因是条件BETWEEN unbounded preceding AND unbounded following
,因为它涵盖了整个分区范围。
来自MSDN:
- UNBOUNDED PRECEDING - 指定窗口从分区的第一行开始。 UNBOUNDED PRECEDING只能指定为窗口起点。
- UNBOUNDED FOLLOWING - 指定窗口在分区的最后一行结束。 UNBOUNDED FOLLOWING只能指定为窗口终点。例如,CURRENT ROW和UNBOUNDED FOLLOWING之间的范围定义了一个窗口,该窗口以当前行开始,以分区的最后一行结束。
当它们在一起时,它们等于PARTITION BY s.month