首页 > 试题广场 >

获取每个部门中薪水最高的员工相关信息

[编程题]获取每个部门中薪水最高的员工相关信息
  • 热度指数:992920 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个员工表dept_emp简况如下:
emp_no
dept_no
from_date
to_date
10001 d001
1986-06-26 9999-01-01
10002 d001
1996-08-03 9999-01-01
10003 d002
1996-08-03 9999-01-01

有一个薪水表salaries简况如下:
emp_no
salary
from_date
to_date
10001
88958 2002-06-22
9999-01-01
10002
72527 2001-08-02
9999-01-01
10003
92527 2001-08-02 9999-01-01

获取每个部门中薪水最高的员工相关信息给出dept_no, emp_no以及其对应的salary,按照部门编号dept_no升序排列,以上例子输出如下:
dept_no
emp_no
maxSalary
d001 10001
88958
d002 10003
92527
示例1

输入

drop table if exists  `dept_emp` ; 
drop table if exists  `salaries` ; 
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`));
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d002','1996-08-03','9999-01-01');

INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,92527,'2001-08-02','9999-01-01');

输出

dept_no|emp_no|salary
d001|10001|88958
d002|10003|92527
头像 N刻后告诉你
发表于 2020-05-19 20:31:33
题目:获取所有部门中当前员工薪水最高的相关信息,给出dept_no,emp_no以及其对应的salary,当前表示to_date=‘9999-01-01'隐含要求:按照部门升序排列 错误示范(虽然能通过测试,但实际上是错的)SELECT d.dept_no, d.emp_no, s.salaryFR 展开全文
头像 乔译
发表于 2020-09-04 01:53:13
select uni.dept_no, uni.emp_no, max_salary.salary from (select d.dept_no, s.emp_no, s.salary from dept_emp d join salaries s on d.emp_n 展开全文
头像 牛客291497006号
发表于 2020-12-15 23:57:02
第一步:每个部门最高的薪水 select    d.dept_no,max(s.salary) salary  from    dept_emp d join    salari 展开全文
头像 早起的虫儿e
发表于 2021-04-03 10:53:13
方案1:采用MAX函数求出最高薪资 解题思路: first:求出每个部门的最高薪资集合,作为临时表t second:联结dept_emp,salaries表,采用内连接(其实外连接也可以,如果数据设计合理内外连接结果都一样),这里的目的是为了后面可以同时对应展现dept_no和emp_no 展开全文
头像 小金桔
发表于 2020-03-23 17:38:51
使用分析函数解题部分答案里的group by用法很不规范。select t.dept_no,t.emp_no,t.salary from(select de.dept_no,de.emp_no,s.salary,row_number() over(partition by de.dept_no or 展开全文
头像 数据分析阿宇君
发表于 2020-08-18 18:31:05
获取所有部门中当前(dept_emp.to_date = '9999-01-01')员工当前(salaries.to_date='9999-01-01')薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门升序排列。法一:开窗函数 select t.dept_no 展开全文
头像 yooho
发表于 2020-11-24 01:56:11
【良心正确答案】 /* 其实这种题目有时需求不明确,官方给的数据也不太好验证答案,故可以自己修改或增加数据进行验证 */ /* 我的数据库是mysql8.0 */ 创建表和插入数据: CREATE TABLE dept_emp (emp_no int(11) NOT NULL,dept_no cha 展开全文
头像 109号
发表于 2020-12-14 13:48:15
刚开始的思路:联结两个表后使用GROUP BY 和MAX聚合函数,但是在mysql环境中通不过 SELECT dept_no,dept_emp.emp_no,MAX(salary) AS salary FROM dept_emp INNER JOIN salaries ON dept_emp.em 展开全文
头像 VeteranDriver
发表于 2021-03-17 23:46:36
--2023.11.3更新(窗口函数版) select a.dept_no as dept_no, a.emp_no as emp_no, a.salary as maxSalary from (select de.dept_no as dept_no, 展开全文
头像 牛客707478229号
发表于 2021-04-09 15:15:51
解答:1。先查出每个部门的最高工资2。在用部门编号和工资匹配ps:可以避免一个部门中最高工资有多个人 select d.dept_no,d.emp_no,salary from dept_emp d join salaries s on d.emp_no=s.emp_no where (d.dept 展开全文