首页 > 数据库 >【SQL题目】获取每个部门中当前员工薪水最高的相关信息

【SQL题目】获取每个部门中当前员工薪水最高的相关信息

时间:2023-02-11 23:11:51浏览次数:64  
标签:01 题目 no 薪水 9999 dept emp SQL date

牛客网链接

描述

有一个员工表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');
输出:
d001|10001|88958
d002|10003|92527

题解:

select a.dept_no,a.emp_no,a.salary
from
(select d.dept_no dept_no,d.emp_no emp_no,s.salary salary
from dept_emp d join salaries s
on d.emp_no = s.emp_no) a
right join
(select d.dept_no dept_no,max(s.salary) salary
from dept_emp d join salaries s
on d.emp_no = s.emp_no
group by d.dept_no order by d.dept_no) b
on a.dept_no = b.dept_no and a.salary = b.salary;

 

标签:01,题目,no,薪水,9999,dept,emp,SQL,date
From: https://www.cnblogs.com/camping/p/17112776.html

相关文章

  • 4.docker安装mysql
    下载mysql镜像打开docker镜像仓库https://hub.docker.com   我们下载官方镜像,点击打开   可以看到tags有很多不通版本的mysql   比如我想安装5.7......
  • MySQL主从复制
    原理配置第一步:准备主库以及从库,然后开放指定端口或者直接关闭防火墙 第二步:主库配置binlog-ignore-db=数据库名字:代表忽略对某数据库的复制binlog-do-db=数据......
  • C#将list集合转化为sql
    将list集合转化为sqlin的范围对象比如List<string>idList=newList<string>();idList.Add(“001”);idList.Add(“002”);idList.Add(“003”);select*from......
  • Centos7用rpm安装MySQL数据库
    在Centos7下使用rpm安装下mysql的流程: 首先进入mysql官网的下载地址:​​ https://dev.mysql.com/downloads/mysq​​l/,然后在下载里面把os选择为RedHatEnterpriseLin......
  • MySQL锁
    全局锁 在进行备份的时候,需要加锁,此时只允许DQL语句,关于备份语句mysqldump-hip地址-uroot-p密码db01(需要备份的数据库)>D:/db01.sql;此语句不是mysql语句,使用直......
  • iso sql标准发展及各个版本定义的特性
    ISOSQL标准经历了SQL:2016,SQL:2011,SQL:2008,SQL:2006,SQL:2003(这个版本开始,根据主题拆分),SQL:1999,andSQL-92。从上可知,SQL2003是现代SQL的分水岭之一。......
  • mysql 数据库的一些参数,常用模版和调优方式
    innodb_buffer_pool_size:这个参数是Mysql数据库最重要的参数之一,表示InnoDB类型的表和索引的最大缓存。它不仅仅缓存索引数据,还会缓存表的数据。这个值越大,查询......
  • MySQL——优化(一)理论基础
    一、InnoDB和MyISAM的存储方式1、InnoDB存储方式使用的B+Tree数据结构,物理存储角度是聚簇索引对于主键索引:叶子节点会存储主键以及主键所对应数据块的指针;对应非主......
  • (笔试题)经典题目
    题目代码一#include<stdio.h>#include<string.h>intmain(){chara[1000];inti;for(i=0;i<1000;i++){a[i]=-1-i;}printf("%d",strlen(a));return0;}分......
  • Python SQLite创建数据库和数据表及数据的增删改查
    SQLite是一款轻型的SQL类型数据库,处理速度快且占用资源非常低,Python自带,不需要配置不需要任何外部的依赖。数据库本身就是一个.db文件,非常适合存储本地数据。本文主要介绍......