表: 学生成绩表
+------+-----+ | 字段名称 | 类型 | +------+-----+ | 学号 | int | | 课程号 | int | | 成绩 | int | +------+-----+ 学号和课程号 组成该表的联合主键。 该表的每一行表示 一个学生一个课程的成绩,包含学号、课程号和成绩。
编写一个 SQL 查询,得出成绩从大到小排列之后的累计求和值。
查询结果如下例所示。
示例 1:
输入: 表:学生成绩表 +------+------+----+ | 学号 | 课程号 | 成绩 | +------+------+----+ | 1001 | 1003 | 99 | | 1001 | 1002 | 90 | | 1001 | 1001 | 80 | | 1002 | 1003 | 80 | | 1003 | 1001 | 80 | | 1003 | 1002 | 80 | | 1003 | 1003 | 80 | | 1002 | 1002 | 60 | +------+------+----+ 输出: +------+------+----+------+ | 学号 | 课程号 | 成绩 | 累计成绩 | +------+------+----+------+ | 1001 | 1003 | 99 | 99 | | 1001 | 1002 | 90 | 189 | | 1001 | 1001 | 80 | 269 | | 1002 | 1003 | 80 | 349 | | 1003 | 1001 | 80 | 429 | | 1003 | 1002 | 80 | 509 | | 1003 | 1003 | 80 | 589 | | 1002 | 1002 | 60 | 649 | +------+------+----+------+ 解释: 使用移动窗口函数来计算累计值,语法为:窗口函数 over(partition by < 要分组的列名 >order by < 要排序的列名 >rows between < 范围起始行 > and < 范围终止行 >)。
