牛客SQL练习第12题

65 篇文章 1 订阅

题目描述

获取所有部门中当前(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值