这道题考察对于联合查询的掌握程度:
一般而言,我们使用联表查询时都是取等值关系进行联合,但联表实际上可以有多种联合的方式,比如这道题使用的是自连接,联合方式为s1.emp_no >= s2.emp_no,也即是s1的emp_no字段比s2.emp_no的值要大时都会联合到s1的emp_no上面,这样一条s1的emp_no就对应了多个s2.emp_no,再按照s1.emp_no来分组,求得sum(s2.salary)就能得到前N个当前员工的累计薪资(有点啰嗦)。具体sql如下:
select s1.emp_no, s1.salary, sum(s2.salary) as running_total from salaries s1, salaries s2 where s1.to_date = '9999-01-01' and s2.to_date = '9999-01-01' and s1.emp_no >= s2.emp_no group by s1.emp_no order by s1.emp_no asc;