MySQL刷题-牛客网 Day2

今天继续刷题!

获取所有员工当前的manager

获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date=‘9999-01-01’。
结果第一列给出当前员工的emp_no,第二列给出其manager对应的manager_no。

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 `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

首先要理解这两张表,第一张表dept_emp是存储员工的信息,emp_no是指员工编号,dept_no是指部门编号;第二张表dept_manager是存储经理的信息,dept_no是指部门编号,emp_no是指经理的编号。

其次来分析过滤条件,输出结果是两列且为一一对应,这其中一定需要内联结,联结条件即为员工所在部门和经理所在部门必须一致,即de.dept_no = dm.dept_no.再用WHERE来限制输出,即日期,这里注意两个表中的日期都需要限定,即de.to_date = ‘9999-01-01’ AND dm.to_date =‘9999-01-01’.

还有最后一个条件“如果当前的manager是自己的话结果不显示”,即de.emp_no <> dm.emp_no

输入如下:

SELECT de.emp_no, dm.emp_no AS manager_no 
FROM dept_emp AS de 
INNER JOIN dept_manager AS dm
ON de.dept_no = dm.dept_no 
WHERE dm.to_date = '9999-01-01' 
AND de.to_date = '9999-01-01' 
AND de.emp_no <> dm.emp_no

获取所有部门中当前员工薪水最高的相关信息

获取所有部门中当前员工薪水最高的相关信息,给出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`));

首先给出题解:

SELECT d.dept_no, d.emp_no, MAX(s.salary)
FROM dept_emp AS d
INNER JOIN salaries AS s 
ON d.emp_no = s.emp_no 
AND d.to_date = s.to_date
WHERE d.to_date = '9999-01-01'
GROUP BY d.dept_no

这道题对我来说的点在于过滤条件,即时间一致以及d.to_date = s.to_date

发布了24 篇原创文章 · 获赞 0 · 访问量 324

猜你喜欢

转载自blog.csdn.net/Helslie/article/details/104423658