@(一只心中无码的程序员)专栏程序员
- ~
题目描述
按照salary的累计和running_total,其中running_total为前两个员工的salary累计和,其余以此类推。 具体结果以下Demo展现。。
CREATE TABLE salaries
( emp_no
int(11) NOT NULL,salary
int(11) NOT NULL,from_date
date NOT NULL,to_date
date NOT NULL,
PRIMARY KEY (emp_no
,from_date
));spa
本题的思路为复用 salaries 表进行子查询,最后以 s1.emp_no 排序输出求和结果。 一、输出的第三个字段,是由一个 SELECT 子查询构成。将子查询内复用的 salaries 表记为 s2,主查询的 salaries 表记为 s1,当主查询的 s1.emp_no 肯定时,对子查询中不大于 s1.emp_no 的 s2.emp_no 所对应的薪水求和 二、注意是对员工当前的薪水求和,因此在主查询和子查询内都要加限定条件 to_date = '9999-01-01' SELECT s1.emp_no, s1.salary, (SELECT SUM(s2.salary) FROM salaries AS s2 WHERE s2.emp_no <= s1.emp_no AND s2.to_date = '9999-01-01') AS running_total FROM salaries AS s1 WHERE s1.to_date = '9999-01-01' ORDER BY s1.emp_no