发布网友 发布时间:2022-04-22 04:44
共3个回答
热心网友 时间:2022-04-08 20:40
sum(sal) over (partition by deptno order by deptno desc,sal desc)意思是按照deptno分区对sal“对应deptno和sal连续”求和,而over函数中的order by是指在在同一deptno分区内进行排序 “连续求和”,同一分区内的deptno肯定相同,所以没有意义,而同一分区内的sal倒序“连续求和”,意味着本条记录的求和结果等于上条记录的求和结果+本条记录员工的sal,同一deptno中员工的sal是倒序的,而不是整个结果按照sal倒序,也不是对求和后的sal倒序排列。
** 注意连续求和的结果。
sum(sal) over (order by deptno desc,sal desc) 不按deptno分区,不按部门“连续”求总和追问感谢你的回答让我一下子明白了,可惜百度只让采纳一个。
热心网友 时间:2022-04-08 21:58
你的写法1 每个分区内的sal是倒序排列的
不过写法1中 order by deptno desc其实没有起到作用,因为有partition by deptno子句,如果想要结果按deptno倒序排列,请把order by deptno desc移到最外层:
select ename, sal, deptno,写法2中,你去掉了partition子句,以整个表为分区,这时候计算需要按照 deptno & sal的指定排序进行,进而每一行顺序和写法1不同。
简单说,你想要最后结果按特定排序,请在外层使用order by子句
over后面的order by开窗子句影响计算顺序,并不决定最后结果的顺序。
追问我那样写deptno没有倒序我能理解,但是我写的是over(partition by.....order by deptno desc sal desc)追答你的写法1里面,sal是按照每个分区倒序排序的
前面说过了 over后面的order by开窗子句影响计算顺序,并不决定最后结果的顺序
想要最后结果按特定排序,请在外层使用order by子句
热心网友 时间:2022-04-08 23:33
select ename,sal,deptno,
sum(sal) over (partition by deptno order by deptno desc,sal desc)
from emp
order by order by deptno desc,sal desc;追问这个是正解。
但是我想知道为什么不加最后的order by语句,前面括号里的order by后面加desc就毫无作用。
如果去掉最外层的order by 语句,结果既不会按照deptno倒序排列,也不会按sal倒序排列。
这个是不是说明只要over括号内有按照partition by 分区,over括号内后面的order by就不会执行倒序排列?