题目描述
获取所有部门中当前(dept_emp.to_date = ‘9999-01-01’)员工当前(salaries.to_date=‘9999-01-01’)薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号升序排列。
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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`));
解答:
在mysql中select后出现de.emp_no,则group by后也需要有de.emp_no
select de.dept_no,de.emp_no,max(s.salary)
from dept_emp de
inner join salaries s
on de.emp_no=s.emp_no
where s.to_date='9999-01-01'
and de.to_date='9999-01-01'
group by de.dept_no
如果有多条薪水最高的记录,就不能用max了
select currentsalary.dept_no, currentsalary.emp_no, currentsalary.salary
from
//创建maxsalary表用于存放当前每个部门薪水的最大值
(select d.dept_no, max(s.salary) as salary
from salaries s
join dept_emp d
on d.emp_no = s.emp_no
where d.to_date = '9999-01-01'
and s.to_date = '9999-01-01'
group by d.dept_no) maxsalary,
//创建currentsalary表用于存放当前每个部门所有员工的编号和薪水
(select d.dept_no, s.emp_no, s.salary
from salaries s
join dept_emp d
on d.emp_no = s.emp_no
where d.to_date = '9999-01-01'
and s.to_date = '9999-01-01') currentsalary
//限定条件为两表的dept_no和salary均相等
where currentsalary.dept_no = maxsalary.dept_no
and currentsalary.salary = maxsalary.salary
//最后以currentsalary.dept_no排序输出符合要求的记录表
order by currentsalary.dept_no