【392天】我爱刷题系列151(2018.03.04)

@(一只心中无码的程序员)专栏程序员

叨叨两句

  1. ~

SQL习题046

题目描述
按照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