MYSQL练题笔记-子查询-部门工资前三高的所有员工

news2024/12/29 9:43:39

这个系列的最后一个,也是所有的50题的第一个困难题,看着就有点吓人啧啧啧。

一、题目相关内容

1)相关的表和题目

2)帮助理解题目的示例,提供返回结果的格式

二、自己初步的理解

将每个部门分组,然后用rank()over()窗口函数将每个分组的排名数字小于等于3的输出。但是窗口函数有一个点,他那个排序不用输出,那就用这个查询出来,然后作为父句的条件字段。

将两个表连接起来,如下语句。

Select name as department,employee,salary,rank()over(order by salary) from department d join employee e on d.id=e.departmentId group by e.departmentId

然后我觉得这里应该就不用group by 在窗口函数里面用partition by,就是如下的语句。

Select d.name as department,e.name as employee,salary,rank()over(partition by departmentId order by salary desc) as number from department d join employee e on d.id=e.departmentId;

然后这里显示的结果和最终预期结果很像,天哪然后太棒了

然后下一步就是上面的句子作为子查询,但是发现没什么p用,我排出来也没法根据他来用;但是我又想到一个用where in,然后分组里里面distinct,但是经过多番尝试还是失败了。

想着先去重但是去重的话,利用distinct没办法作为order by和输出的参数,然后我找之前的笔记,disctint可以用在count()里面,但是还是没有做出来。还是得看题解啊,我还以为这一题我能写出来,很有头绪啊。

三、题解展示和分析

题解如下

SELECT

Department.NAME AS Department,

e1.NAME AS Employee,

e1.Salary AS Salary

FROM

Employee AS e1,Department

WHERE

e1.DepartmentId = Department.Id

AND 3 > (SELECT  count( DISTINCT e2.Salary )

 FROM         Employee AS e2

 WHERE e1.Salary < e2.Salary AND e1.DepartmentId = e2.DepartmentId         ) #这是重点

ORDER BY Department.NAME,Salary DESC;

这个题解里说先找出公司里前 3 高的薪水,意思是不超过三个值比这些值大;实在是高啊,然后用上连接,真的连接是个好东西,通常是解题的关键啊。这个题解里关于这个子查询的作者的解释如下

我的理解是先关注不要输出的e1.salary 定值

然后思考对应的条件下要输出的e2.salary的值,

然后最终想象输出的结果count()的数量,但是这几步其实很难想到的,因为太不直接了,要通过很多步的思考才能想出最终要达到的结果。

就是你想拿下前3的记录,两个相同的薪水对比,

如果他比你大的条数有4条,那你就是排第5,

如果他比你大的条数有3条,那你就是排第4,

如果他比你大的条数有2条,那你就是排第3,

当然最终的结果根据题目的要求是不同的薪水排名前三,所以还要利用distinct去下重

四、总结

这题太难了,我其实还没有思考透,还需要再复习。

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

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

相关文章

【C 剑指offer】有序整型矩阵元素查找 {杨氏矩阵}

目录 题目内容&#xff1a; 思路&#xff1a; 图形演示&#xff1a; 复杂度分析 C源码&#xff1a; /** *************************************************************************** ******************** ********************* ******…

STM32读取EEPROM存储芯片AT24C512故障然后排坑记录

背景&#xff1a; 有一个项目用到STM32F091芯片去读取 AT24C512C-SSHD EEPROM 芯片&#xff0c;我直接移植了之前项目的IIC库&#xff0c;结果程序运行后&#xff0c;读不出EEPROM里面的数据。 摘要&#xff1a; 本文主要介绍一个基于STM32F091芯片和AT24C512C-SSHD EEPROM芯片…

2、LLVM 函数名称加密 及3种PASS的实现

sudo usermod -a -G vboxsf nowind nowind是你的虚拟机登录的用户名解决virtualbox 虚拟机共享文件夹不能使用的问题 第一种&#xff1a;源码内实现pass&#xff1a; 实现EncodeFunctionName 的pass&#xff0c;核心代码如下 相关文件的修改&#xff1a; 因为后面同样用到…

【征稿倒计时十天】第三届高性能计算与通信工程国际学术会议(HPCCE 2023)

【有ISSN、ISBN号&#xff01;&#xff01;往届均已完成EI检索】 第三届高性能计算与通信工程国际学术会议(HPCCE 2023) 2023 3rd International Conference on High Performance Computing and Communication Engineering (HPCCE 2023) 2023年12月22-24日 | 中国哈尔滨 第三…

由浅入深分析c++多态原理

多态 背景多态构成多态的两个条件虚函数虚函数重写虚函数重写的两个例外 c11的override和final重载、覆盖&#xff08;重写&#xff09;、隐藏&#xff08;重定义的对比&#xff09; 抽象类接口继承和实现继承 多态底层原理虚函数表易错问题&#xff1a; 多态原理 动态绑定和静…

深入源码解析ArrayList:探秘Java动态数组的机制与性能

文章目录 一、 简介ArrayList1.1 介绍ArrayList的基本概念和作用1.2 与数组的区别和优势 二、 内部实现2.1 数据结构&#xff1a;动态数组2.2 添加元素&#xff1a;add()方法的实现原理2.3 扩容机制&#xff1a;ensureCapacity()方法的实现原理 三、 常见操作分析3.1 获取元素&…

OLED屏幕,如何成为商显主流

OLED屏幕在商显领域的应用逐渐增加&#xff0c;成为商显主流的原因主要有以下几点&#xff1a; 显示效果优异&#xff1a;OLED屏幕具有自发光原理&#xff0c;色彩鲜艳、对比度高、视角广&#xff0c;能够提供更好的视觉体验。在商业展示、广告宣传等场景中&#xff0c;OLED屏幕…

高通平台开发系列讲解(USB篇)Composite USB gadget framework

文章目录 一、Gadget framework二、Composite driver and gadget driver interaction沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要图解高通平台PCIe EP软件架构 一、Gadget framework Composite USB gadget framework 架构如下所示: The composite fram…

【二分查找】【区间合并】LeetCode2589:完成所有任务的最少时间

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 有序向量的二分查找&#xff0c;向量只会在尾部增加删除。 题目 你有一台电脑&#xff0c;它可以 同时 运行无数个任务。给你一个二维整数数组 tasks &#xff0c;其中 ta…

java常用集合的区别与联系以及应用场景

文章目录 Java集合三大类&#xff08;1&#xff09;List概述&#xff08;2&#xff09;Set概述&#xff08;3&#xff09;Map概述 集合间的区别与联系List&#xff0c;Set和Map的区别ArrayList、Vector和LinkedList的区别HashSet、LinkedHashSet和TreeSet的区别HashSet与HashMa…

探索未来新趋势:鸿蒙系统的崭新时代

探索未来新趋势&#xff1a;鸿蒙系统的崭新时代 随着科技的不断发展&#xff0c;操作系统作为计算机和移动设备的核心&#xff0c;扮演着至关重要的角色。近年来&#xff0c;一种备受瞩目的操作系统——鸿蒙系统&#xff08;HarmonyOS&#xff09;崭露头角&#xff0c;正引领着…

Standoff 12 网络演习

在 11 月 21 日至 24 日于莫斯科举行的 "Standoff 12 "网络演习中&#xff0c;Positive Technologies 公司再现了其真实基础设施的一部分&#xff0c;包括软件开发、组装和交付的所有流程。安全研究人员能够在安全的环境中测试系统的安全性&#xff0c;并尝试将第三方…

Java - Spring中BeanFactory和FactoryBean的区别

BeanFactory Spring IoC容器的顶级对象&#xff0c;BeanFactory被翻译为“Bean工厂”&#xff0c;在Spring的IoC容器中&#xff0c;“Bean工厂”负责创建Bean对象。 BeanFactory是工厂。 FactoryBean FactoryBean&#xff1a;它是一个Bean&#xff0c;是一个能够辅助Spring实例…

Qt 中文处理

windows下 Qt显示中文的几种方式&#xff1a; 1&#xff0c; 环境&#xff1a;Qt 5.15.2 vs2019 64位 win11系统 默认用Qt 创建的文件使用utf-8编码格式&#xff0c;此环境下 中文没有问题 ui->textEdit->append("中文测试"); 2&#xff0c; 某些 低于…

js Array.every()的使用

2023.12.13今天我学习了如何使用Array.every()的使用&#xff0c;这个方法是用于检测数组中所有存在的元素。 比如我们需要判断这个数组里面的全部元素是否都包含张三&#xff0c;可以这样写&#xff1a; let demo [{id: 1, name: 张三}, {id: 2, name: 张三五}, {id: 3, name…

高效数组处理的Numpy入门总结

NumPy是Python中一个重要的数学库&#xff0c;它提供了高效的数组操作和数学函数&#xff0c;是数据科学、机器学习、科学计算等领域的重要工具。下面是一个简单的NumPy学习教程&#xff0c;介绍了NumPy的基本用法和常用函数。 安装NumPy 在使用NumPy之前&#xff0c;需要先安…

ArkTS的状态管理机制(State)

什么是ArkTS的状态管理机制 声明式UI中&#xff0c;是以状态(State)来驱动视图更新的(View)。 状态是指驱动视图更新的数据(被装饰器标记的变量)。 视图是指UI描述渲染得到的用户页面。 互动事件可以改变状态的值。状态改变以后&#xff0c;又会触发事件&#xff0c;渲染页面。…

统信UOS使用4种方法重置用户密码

原文链接&#xff1a;统信UOS使用4种方法重置用户密码 hello&#xff0c;大家好啊&#xff0c;今天我要给大家介绍的是在统信UOS操作系统上使用4种不同方法来重置用户密码。我们都知道&#xff0c;在日常使用中&#xff0c;偶尔会忘记密码&#xff0c;尤其是在使用多个账户的情…

蓝牙协议栈学习笔记

蓝牙协议栈学习笔记 蓝牙简介 蓝牙工作在全球通用的 2.4GHz ISM&#xff08;即工业、科学、医学&#xff09;频段&#xff0c;使用 IEEE802.11 协议 蓝牙 4.0 是迄今为止第一个蓝牙综合协议规范&#xff0c;将三种规格集成在一起。其中最重要的变化就是 BLE&#xff08;Blue…

淘宝订单API接口在电商行业中的应用与实现

一、引言 随着电商行业的快速发展&#xff0c;订单处理成为电商运营的核心环节。淘宝作为中国最大的电商平台之一&#xff0c;其订单API接口在电商行业中的应用越来越广泛。本文将详细介绍淘宝订单API接口在电商行业中的应用&#xff0c;并深入剖析相关的技术细节&#xff0c;…