牛客网数据库sql实战剖析(一)

news2024/9/24 7:19:51

牛客网SQL实战

1.查找最晚入职员工的所有信息

思路:找出入职时间最大的时间,作为子查询条件进一步查找到该员工的其它信息。

SELECT * FROM employees
WHERE hire_date = (
    SELECT MAX(hire_date)
    FROM employees
);

这里不能用order by的方式,因为入职时间最大的可能不唯一。

SELECT * FROM employees
WHERE hire_date order by hier_date limit 1;

2.查找入职员工时间排名倒数第三的员工所有信息

思路:降序排名,跳过两条取一条(即第三条)

1)方法一:limit 2,1
select * from employees where hire_date=(
    select distinct hire_date 
    from employees 
    order by hire_date desc 
    limit 2,1
)
2)方法二:limit 1 offset 2
select * from employees where hire_date=(
    select distinct hire_date 
    from employees 
    order by hire_date desc 
    limit 1 offset 2
)

3.查找当前薪水详情以及部门编号dept_no

思路:使用left(right) join可以减少关联次数(全部字段直接用 tablename.*),另外排序默认是asc升序。

select s.*,d.dept_no from dept_manager d 
left join salaries s 
on s.emp_no=d.emp_no order by s.emp_no;

4.查找所有已经分配部门的员工的last_name和first_name以及dept_no

思路:left(right) join

select e.last_name,e.first_name,d.dept_no from employees e 
right join dept_emp d
on e.emp_no=d.emp_no;

5.查找所有员工的last_name和first_name以及对应部门编号dept_no

思路:left(right) join

select e.last_name,e.first_name,d.dept_no from employees e 
left join dept_emp d
on e.emp_no = d.emp_no

6.查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t

思路:按照emp_no分组,然后在分组里面继续用having筛选。

select emp_no,count(emp_no) t from salaries 
group by emp_no 
having t>15;

7.找出所有员工当前薪水salary情况

思路:按照salary分组,然后直接select即可(或者直接用distinct)

select salary 
from salaries 
group by salary 
order by salary desc;
或者
select distinct(salary) 
from salaries 
order by salary desc;

8.获取所有非manager的员工emp_no

思路:利用左连接未匹配到为空来匹配null值,null的即为非mananger。或者使用not in。
普及一下各个连接的关系:
在这里插入图片描述

select e.emp_no 
from employees e left join dept_manager d
on e.emp_no=d.emp_no
where d.dept_no is null;
或者
方法1:NOT IN+子查询
select emp_no
from employees
where emp_no not in (select emp_no from dept_manager);

9.获取所有员工当前的manager

思路:用INNER JOIN+不等于

select e.emp_no,m.emp_no manager
from dept_emp e
left join dept_manager m
on e.dept_no=m.dept_no
where e.emp_no 
not in(select emp_no from dept_manager)
或者用INNER JOIN+不等于
SELECT e.emp_no, m.emp_no AS manager_no
FROM dept_emp AS e
INNER JOIN dept_manager AS m
ON e.dept_no=m.dept_no
WHERE e.emp_no!=m.emp_no
AND e.to_date='9999-01-01'
AND m.to_date='9999-01-01'
补充:别名最好取de,dm
补充:不等于可以用<>或者!=表示

10.获取每个部门中当前员工薪水最高的相关信息(#)

思路:一张表记录最高薪水(部门编号,当前最高薪水),一张表记录所有员工的部门及薪水信息(部门编号,员工编号,当前薪水),用部门编号和薪水相等取到最高薪水的员工ID。
注意:1)有多条相同的max salary的情况;2)emp_no是非聚合字段,不能出现在SELECT。因为一个聚合字段(dept_no)对应多个非聚合字段(emp_no),所以选择的时候,会随机选择非聚合字段中的任何一个,于是出错。

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_no = s.emp_no
     and d.to_date = '9999-01-01'
     and s.to_date = '9999-01-01'  
    ) as uni, /* 部门编号,员工编号,当前薪水 */
    (select d.dept_no, max(s.salary) as salary
     from dept_emp d join salaries s
     on d.emp_no = s.emp_no
     and d.to_date = '9999-01-01'
     and s.to_date = '9999-01-01'  
     group by d.dept_no
    ) as max_salary /* 部门编号,当前最高薪水 */
where uni.salary = max_salary.salary
and uni.dept_no = max_salary.dept_no
order by uni.dept_no;

补充:如果这题不需要给出emp_no(即只求所有部门中当前员工薪水最高值),则用INNER JOIN和GROUP BY和MAX即可解决:
SELECT d.dept_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=‘9999-01-01’
AND s.to_date=‘9999-01-01’
GROUP BY d.dept_no;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

私募证券基金动态-12月报

成交量&#xff1a;2022全年日均9,277.25亿元12月A股两市日均成交7,875.28亿元&#xff0c;环比下降15.15%、同比下降26.83%&#xff0c;是2022年继9月以后成交量次低的月份。2022年全年&#xff0c;日均成交量9,277.25亿元。管理人&#xff1a;新提交备案29家&#xff0c;备案…

【北京理工大学-Python 数据分析-1.2-NumPy数据存储与函数】

一、数据CSV文件的存取 CSV文件&#xff08;Comma-Separated Value,逗号分隔值&#xff09;是一种常见的文件格式&#xff0c;用来存储批量数据。 如常见的数据存储为CSV后 NumPy中有两个函数可以写入CSV格式&#xff0c;并从CSV文件中读取数据。 CSV文件的存储 np.savetxt…

mysql中的rand()函数简介以及和其他函数组合使用实践

一、本文结构简介 本文首先介绍rand()的基本使用 其次分别介绍round与rand的合用、ceiling与rand的合用、floor与rand的合用、md5与rand的合用 二、rand()的基本使用 rand()是系统自带的获取随机数的函数 (1)无参数&#xff1a;产生获取[0,1)之间的float型的数字 (2)有参数&a…

【jQuery】写一个电梯导航

今天大概是跟着pink老师学习JS的第八天&#xff0c;看了有410章了。 视频教程&#xff1a;pink JS 今天早上跟着老师做了一个电梯导航&#xff1a; 还是那个熟悉的品优购项目。。。 之后我打算自己练习一下&#xff0c;然后就出现bug了。 <div class"tuijian"&…

CO13 订单取消确认报错:“在为订单XXXX 确定实际成本中出错”处理分析

用户再操作CO13时报了一个错误&#xff1a;在为订单XXXX 确定实际成本中出错。 看到这个错误以为是财务同时没有发布成本导致的。然后我也操作了一下发现了一些过账中的错误。 原来是冲销这个工单的账期是在前几个月&#xff0c;而那个月已经关账期了&#xff0c;所以报错。 …

ORB-SLAM3代码和算法学习—浅谈代码中的纯定位模式

0总述 在Tracking线程中&#xff0c;当系统初始化完成后就会正式进入跟踪环节。在ORB-SLAM3算法代码中提供了两种模式&#xff0c;一种是纯定位模式&#xff0c;一种是定位建图的SLAM模式。 对于纯定位模式&#xff0c;在源码中由成员变量mbOnlyTracking控制&#xff0c;这个…

django 利用Form上传文件到 media 文件夹

背景&#xff1a;利用 Form 收集用户提交的信息&#xff0c;包括字符串和文件对象&#xff0c;文件保存在项目的 media 文件夹&#xff0c;因为 static 文件一般是用来存静态文件 css 或者项目所需要的图片&#xff0c;用户上传的文件应该保存在其他文件夹; 1、 启用 media&am…

实战演练 | 使用 SQL 别名简化查询并自定义结果

别名能够在不影响基础表或视图的情况下临时重命名表或列。作为大多数甚至所有关系数据库管理系统都支持的 SQL 功能&#xff0c;别名是简化查询和/或自定义结果集中列标题的好方法。在这篇文章中&#xff0c;我们将使用 Navicat Premium 16 来完成这两项工作。重命名列许多数据…

十级NLPer才能笑出声的算法梗!

文&#xff5c;付奶茶近期小编整理出了一些非常好笑的梗图&#xff0c;与各位NLPer共赏&#xff0c;希望与大家一起评选出本期最好笑的梗图选手&#xff01;【1号选手&#xff1a;非常擅长讲笑话的NLM】前排评论区&#xff1a;&#xff08;1&#xff09;I enjoyed your joke ab…

Android 深入系统完全讲解(一)

因为很多朋友还是会咨询 Android 相关的内容&#xff0c;于是便花费了一些时间&#xff0c;把我总结的方法&#xff0c;一些系统代码的跟踪流程&#xff0c;做一个完整的梳理&#xff0c; 算是给自己职业生涯画个完美的句号。 虽然说后续写代码会相对少一些&#xff0c;但是还…

P1044 [NOIP2003 普及组] 栈

P1044 [NOIP2003 普及组] 栈 方法一&#xff1a;递推dp 思路&#xff1a; 求n的总数&#xff0c;我们可以分解成n在第i&#xff08;1<i<n)位置输出讨论。 我们用a[i][j]表示数i在第j位置输出的情况总数&#xff0c;ans[i][j]表示数i在第1--j位置输出总数和 1&#x…

ROS地图栅格信息

一.地图栅格消息nav_msgs/OccupancyGrid // 栅格地图消息 std_msgs/Header header nav_msgs/MapMetaData info time map_load_time float32 resolution // 分辨率 geometry_msgs/Pose origin // 原点坐标 geometry_msgs/Quaternion orientati…

元数据管理Datahub基于Docker进行部署

目录1. 服务器要求2. 安装Docker3. 安装jq4. 安装python35. 安装docker-compose v1(deprecated&#xff0c;为了兼容性)5.1 安装virtualenv5.2 安装docker-compose6. 安装datahub(在docker-compose-v1-py虚拟环境下)7. 访问Web页面&#xff0c;然后导入测试元数据8. 删除datahu…

数字孪生的概念是什么【深度】

数字孪生技术最早提出是用于航空航天领域&#xff0c;美国 NASA 指出“一个数字孪生&#xff0c;是一种集成化了的多种物理量、多种空间尺度的运载工具或系统的仿真&#xff0c;该仿真使用了当前最为有效的物理模型、传感器数据的更新、飞行的历史等等&#xff0c;来镜像出其对…

C语言C++中与接收、输出字符相关的问题

C语言中&#xff0c;在使用scanf("%c",&data);读取一个字符时&#xff0c;有时会遇到scanf吞回车符的情况。 这里搜到几种常用的解决方法&#xff1a; 1.在scanf()中使用’\n’屏蔽回车符号。 scanf("\n%c",&c);2.在scanf()格式串最前面添加空格&…

【Linux】缓冲区的理解

文章目录什么是缓冲区&#xff1f;为什么要有缓冲区&#xff1f;缓冲区刷新策略请看下面代码&#xff1a;接着上篇【Linux】文件操作|文件描述符|重定向 什么是缓冲区&#xff1f; 我们口中说的缓冲区&#xff0c;一般指的是用户级语言层面给我们提供的缓冲区。本质就是一段…

nRF24L01芯片(模块)介绍

nRF24L01芯片&#xff08;模块&#xff09;简介nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括&#xff1a;频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率频道选择和协议的设…

使用 K8S 部署 RSS 全套自托管解决方案- RssHub + Tiny Tiny Rss

前言 什么是 RSS? RSS 是一种描述和同步网站内容的格式&#xff0c;是使用最广泛的 XML 应用。RSS 搭建了信息迅速传播的一个技术平台&#xff0c;使得每个人都成为潜在的信息提供者。发布一个 RSS 文件后&#xff0c;这个 RSS Feed 中包含的信息就能直接被其他站点调用&…

【MySQL】SQL查询语句在MySQL中的执行过程

文章目录1.MYSQL基础架构2.连接器3.查询缓存4.解析SQL5.执行SQL5.1 预处理器5.2 优化器5.3 执行器6.总结1.MYSQL基础架构 连接器&#xff1a;建立连接、管理链接、校验用户身份查询缓存&#xff1a; 查询语句如果命中查询缓存则直接返回&#xff0c;否则继续往下执行。&#xf…

基于Java+SpringBoot+vue+element疫情物资捐赠分配系统设计和实现

基于JavaSpringBootvueelement疫情物资捐赠分配系统设计和实现 &#x1f345; 作者主页 超级帅帅吴 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录基于JavaSpringBootvueelement疫情物资捐赠分配…