sql570 | 至少有5名下属的经理 | join on | group by | having

讲给一张表,表字段分别为 id 、姓名、部分、经理id,可能存在张三既是下属也是经理
现在找出下属起码有5名员工的经理

CREATE TABLE Employee (
    id INT,
    name VARCHAR(255),
    department VARCHAR(255),
    managerId INT
);

INSERT INTO Employee (id, name, department, managerId)
VALUES
    (101, 'John', 'A', NULL),
    (102, 'Dan', 'A', 101),
    (103, 'James', 'A', 101),
    (104, 'Amy', 'A', 101),
    (105, 'Anne', 'A', 101),
    (106, 'Ron', 'B', 101),
    (107, 'tt1', 'B', 102),
    (108, 'tt2', 'B', 102),
    (109, 'tt3', 'B', 102),
    (110, 'tt4', 'A', 102),
    (111, 'tt5', 'A', 103),
    (112, 'tt6', 'A', 103),
    (113, 'tt7', 'A', 103);

select Name
from (
select Manager.Name as Name, count(Report.Id) as cnt
from 
Employee as Manager join Employee as Report
on Manager.Id = Report.managerId
group by Manager.id
)
where cnt >= 3;

在这里插入图片描述

###################################
思路讲同一张表变成两张表,一张经理表,一张下属表,然后根据经理表的id == 员工表中经理表id 进行 join on  生成一张新表,然后在用筛选条件 找出cnt >= 5 的name

#######	参考
#######注意 方法一 开销很大
# 找出至少有五个直接下属的经理  --> 找出 经理 下面至少有5个员工
-- select name
-- from Employee
-- where id in (select managerId
--             from Employee
--             group by    managerId
--             having count(*) >= 5);
/*
john 5

*/
select Name 
from
(
select Manager.Name as Name, count(Report.Id) as cnt
from 
Employee as Manager join Employee as Report
on Manager.Id = Report.managerId
group by Manager.id
)
as ReportCount 
where cnt>=5;

#方法二
######更新  使用 having
select Manager.Name as Name
from 
Employee as Manager join Employee as Report
on Manager.Id = Report.managerId
group by Manager.Id
having count(Report.Id) >= 5;


######方法3
select Employee.name as name
from(
    select ManagerId 
    from Employee
    group by ManagerId
    having count(ManagerId) >= 5
)as Manager join Employee
on Manager.ManagerId = Employee.Id;

以下是gpt 对group by 和 having 的解释
在这里插入图片描述

CREATE TABLE Employee (
    id INT,
    name VARCHAR(255),
    department VARCHAR(255),
    managerId INT
);

INSERT INTO Employee (id, name, department, managerId)
VALUES
    (101, 'John', 'A', NULL),
    (102, 'Dan', 'A', 101),
    (103, 'James', 'A', 101),
    (104, 'Amy', 'A', 101),
    (105, 'Anne', 'A', 101),
    (106, 'Ron', 'B', 101),
    (107, 'tt1', 'B', 102),
    (108, 'tt2', 'B', 102),
    (109, 'tt3', 'B', 102),
    (110, 'tt4', 'C', 102),
    (111, 'tt5', 'C', 103),
    (112, 'tt6', 'C', 103),
    (113, 'tt7', 'D', 103);

select count(Employee.department)
from  
Employee
group by Employee.department
having count(Employee.department) >=3
;

在这里插入图片描述

在线sql编辑器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS 页面跳转控制整个界面的转场动画

好 本文 我们来说 页面间的转场动画 就是 第一个界面到另一个界面 第一个界面的退场和第二个界面的进场效果 首先 我这里 创建了两个页面文件 Index.ets和AppView.ets index组件 编写代码如下 import router from "ohos.router" Entry Component struct Index {b…

架构的演进

1.1单体架构 单体架构也称之为单体系统或者是单体应用。就是一种把系统中所有的功能、模块耦合在一个应用中的架构方式。 存在的问题: 代码耦合:模块的边界模糊、依赖关系不清晰,整个项目非常复杂,每次修改代码都心惊胆战迭代困…

LeetCode.2788. 按分隔符拆分字符串

题目 题目链接 分析 题目的意思是给我们一个字符串数组和一个分隔符,让我们按照分隔符把字符串数组分割成新的字符串数组。 看到这个描述,这不就是直接就是利用 按照分隔符分割字符串的系统库函数split(),这个函数的意思就是 把一个字符串…

SpringBoot解决Slow HTTP慢速攻击漏洞

项目场景: 扫描到的漏洞截图: 攻击原理: Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送…

H3C交换机S6850配置M-LAG三层转发

正文共:1999 字 30 图,预估阅读时间:3 分钟 前面提到M-LAG是一种跨设备链路聚合技术,将两台物理设备在聚合层面虚拟成一台设备来实现跨设备链路聚合,从而提供设备级冗余保护和流量负载分担。 之前已经做了DRNI的三层转…

MySQL之外键约束和表关系

前言 一个项目中如果将所有的数据都存放在一张表中是不合理的,比如一个员工信息,公司只有2个部门,但是员工有1亿人,就意味着员工信息这张表中的部门字段的值需要重复存储,极大的浪费资源,因此可以定义一个…

突破性概念“整车智能”背后,比亚迪又在蓄力何方?

比亚迪再以“整车智能”的颠覆性创意惊艳我们,他们这次又在酝酿哪些革命性技术,引领行业? 2024年的比亚迪梦想日,为汽车行业带来了一次全新的飞跃。这家传统但很有实力,却又颇有野心的自主品牌车企,再次以开…

使用Python在本地生成助记词

新建并打开一个空文件夹 逐行 执行命令 python3 -m pip install --upgrade pippip3 install eth_accountpip3 install web3touch acco.py然后看到文件夹下面会有个acco.py文件 将把下面的代码粘贴到acco.py中保存。 import os from eth_account import Accountif __name__ …

AI视频智能识别技术在智慧农业大棚升级改造管理场景中的应用方案

一、需求分析 随着科技的进步和农业现代化的推进,智能化技术逐渐成为现代农业发展的重要支撑。农业大棚作为现代农业的重要组成部分,其智能化改造对于提高农业生产效率、降低成本、增加收益具有重要意义。利用先进的信息化手段来对农业大棚进行管理&…

防伪技术行业研究:年复合增长率约为10%

近年来,我国各种新的防伪技术不断涌现,部分防伪技术已经达到国际先进水平,并广泛应用于产品防伪、票证防伪等领域,推动了防伪行业的持续、健康发展。 常见的产品防伪技术有:隐形分子技术、二维码防伪、揭开留底防伪、安…

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API,所以需要包含头文件…

systemverilog/verilog文件操作

1、Verilog文件操作 Verilog具有系统任务和功能,可以打开文件、将值输出到文件、从文件中读取值并加载到其他变量和关闭文件。 1.1 、Verilog文件操作 1.1.1、打开和关闭文件 module tb; // 声明一个变量存储 file handler integer fd; initial begin // 以写权限打开一个文…

计算机vcruntime140.dll丢失要怎么解决,快速解决dll报错问题

在计算机系统中,vcruntime140.dll是一个至关重要的动态链接库文件(DLL),它是Visual C Redistributable运行时组件的重要组成部分。这个特定的.dll文件承载了大量的运行时函数和资源,对于许多基于Windows的应用程序来说…

基于动态顺序表实现通讯录项目

本文中,我们将使用顺序表的结构来完成通讯录的实现。 我们都知道,顺序表实际上就是一个数组。而使用顺序表来实现通讯录,其内核是将顺序表中存放的数据类型改为结构体,将联系人的信息存放到结构体中,通过对顺序表的操…

【微服务核心】ZooKeeper

文章目录 1. 简介2. 下载与安装2.1 单机版2.2 集群版 3. 选举机制3.1 首次启动3.2 非首次启动 4. 客户端常用命令行操作4.1 查看节点信息4.2 节点类型4.3 监听器原理4.4 写数据流程 5. 编程实现监听服务动态上下线6. 分布式锁6.1 手写简易分布式锁6.2 Curator 框架 7. 进阶知识…

python对象方法 反射

前言 类实例化得到的对象可以直接调用类中定义的函数,并且可以将对象本身作为第一个参数,那么类能不能也能像对象一样使用类体中的函数而不需要传递第一个参数呢?如果我们使用别人封装好的类,如何判断这个类或者对象是否有某个属…

未来 AI 可能给哪些产业带来哪些进步与帮助?

AI时代如何要让公司在创新领域领先吗?拥抱这5种创新技能,可以帮助你的公司应对不断变化。包括人工智能、云平台应用、数据分析、 网络安全和体验设计。这些技能可以帮助你提高业务效率、保护公司知识资产、明智决策、满足客户需求并提高销售额。 现在就加…

Python入门到精通(三)——Python循环语句

Python循环语句 一、while 循环 1、基础语法 2、嵌套应用 二、for 循环 1、基础语法 2、嵌套应用 三、循环中断:break 和 continue 1、break 2、continue 四、综合案例 一、while 循环 1、基础语法 while的条件需得到布尔类型,True表示继续循环…

一款真正可用的支付系统,可搭建自己的易支付系统,开源无后门

应用介绍 介绍: thinkphp开发的风吹雪支付系统易支付去后台验证版本,支持代理系统,适合搭建易支付系统,完整100%可运行网站源码。是为数不多的一款真正可用的支付系统,开源无后门可运营。 自带微信支付宝官方通道,资质…

探秘网络爬虫的基本原理与实例应用

1. 基本原理 网络爬虫是一种用于自动化获取互联网信息的程序,其基本原理包括URL获取、HTTP请求、HTML解析、数据提取和数据存储等步骤。 URL获取: 确定需要访问的目标网页,通过人工指定、站点地图或之前的抓取结果获取URL。 HTTP请求&#…