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 不可省略!!
本文讲解了如何使用SQL窗口函数解决SQL60中关于计算员工薪水累计和running_total的问题,通过实例展示了如何根据雇员编号和离职日期进行累加,并强调了ORDERBY在窗口函数中的必要性。

951

被折叠的 条评论
为什么被折叠?



