1. 题目
-
题目来源:SQL60 统计salary的累计和running_total
-
题目描述
按照salary的累计和running_total,其中running_total为前N个当前( to_date = ‘9999-01-01’)员工的salary累计和,其他以此类推。 -
一张表
# salaries 10001|60117|1986-06-26|1987-06-26 10001|62102|1987-06-26|1988-06-25 10001|66074|1988-06-25|1989-06-25 10001|66596|1989-06-25|1990-06-25 10001|66961|1990-06-25|1991-06-25
-
所需结果
emp_no salary running_total 10001 88958 88958 10002 72527 161485 10003 43311 204796 10004 74057 278853 10005 94692 373545 10006 43311 416856 10007 88070 504926 10009 95409 600335 10010 94409 694744 10011 25828 720572
2. 题解
直接使用窗口函数即可:
SELECT emp_no,
salary,
SUM(salary) OVER(ORDER BY emp_no) running_total
FROM salaries
WHERE to_date = '9999-01-01'
注意,在语法上,聚合函数的窗口函数,PARTITION BY
和 ORDER BY
都可以省略,有 ORDER BY
时候表示累计统计。
但是对于排序窗口函数,ORDER BY 不可省略!!