题目:

Employee 表包含所有员工和他们的经理。每个员工都有一个 Id,并且还有一列是经理的 Id。

给定 Employee 表,请编写一个SQL查询来查找至少有5名直接下属的经理。对于上表,您的SQL查询应该返回:

注意:
没有人是自己的下属。

解题思路:

方法一:

使用子查询,先按经理id分组,过滤掉少于5个人的数据得到临时表,再用原表进行连接,取出姓名。

①子查询

1 select managerId
2 from employee
3 group by managerId
4 having count(*) >= 5;

②连接查询,取出姓名。

1 select name
2 from employee e1
3 join (select managerId
4 from employee
5 group by managerId
6 having count(*) >= 5
7 ) e2
8 on e1.id = e2.managerId;

 方法二:自连接

①先将表自连接

1 select *
2 from employee e1
3 join employee e2
4 on e1.id = e2.managerId

②将查询出来的表进行筛选,以e1表中的name进行分组,并且分组后要数量多于5条的name。

1 select e1.name
2 from employee e1
3 join employee e2
4 on e1.id = e2.managerId
5 group by e1.name
6 having count(*) >= 5;

注意:

where 和 having 的区别:如果想在分组后再次进行条件筛选,使用having关键字

1.WHERE在分组前使用, HAVING在分组后使用;

2.运算顺序:WHERE 优先于 HAVING;

3.作用对象不同:WHERE只作用于表,而HAVING作用于GROUP BY子句的分组结果,如果不存在GROUP BY子句,则作用于WHERE子句的搜索结果,如果where子句也没有,则作用于表;

4.计算对象不同:HAVING用于组的计算,WHERE计算指定字段的每条记录;

通俗的话:凡是表里没有这个字段的时候(自造的字段)就必须用HAVING,否则建议使用WHERE,它的性能更优。

力扣570(MySQL)-至少有5名直接下属的经理(简单)的更多相关文章

  1. 力扣---511. 游戏玩法分析 I

    活动表 Activity: +--------------+---------+| Column Name  | Type    |+--------------+---------+| player ...

  2. LeetCode 1244. 力扣排行榜

    地址 https://www.acwing.com/solution/LeetCode/content/5765/ 题目描述新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一 ...

  3. 刷题-力扣-LCP 07. 传递信息

    LCP 07. 传递信息 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/chuan-di-xin-xi 著作权归领扣网络所有.商业转 ...

  4. 【力扣】649. Dota2 参议院

    Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决定.他们以一个基于轮为过程的投 ...

  5. 力扣---1148. 文章浏览 I

    Views 表:+---------------+---------+| Column Name   | Type    |+---------------+---------+| article_i ...

  6. 力扣算法题—069x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

  7. 设置Linux中的Mysql不区分表名大小写

    1. MySQL数据库的表名在Linux系统下是严格区分大小写的,在Windows系统下开发的程序移植到Linux系统下,如果程序中SQL语句没有严格按照大小写访问数据库表,就可能会出现找不到表的错误 ...

  8. MySQL服务器修改主机名后问题解决

    1.单机MySQL主机名修改 今天无事看到自己的主机名不对,于是改了一下,以便区分服务器,那只重启MySQL时出现下面错误: MySQL manager or server PID file coul ...

  9. MySQL获取Schema表名和字段信息

    MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,U ...

  10. mysql查询所有表名

    mysql使用sql查询表名的两种方法: 1.show tables; 2.SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WH ...

随机推荐

  1. linux脚本免密的方法/不用输入密码

    第一种方法:使用管道(上一个命令的 stdout 接到下一个命令的 stdin):在脚本首行添加 #!/bin/bashecho password | sudo -S apt-get update 第 ...

  2. 基于python的环境噪声监测报警系统实例解析

    一 系统简介 1.简介 该系统可以实时显示噪声量大小,并进行一段时间的噪声统计. 2.特性 实现噪声值的统计 实现了噪声显示 完整的主题和样式控制 多线程的运行模式 二 源码解析 1.串口db值获取: ...

  3. 适合新手练习的python开源经典源码

    一 前记 python学习离不开三要素: A.基础知识要熟悉 B. 练习源码要够量 C.实战项目要跟上 二 链接 书本的基础就看几本书就可以了,这里给出源码练习的经典开源源码: 该链接集合了pytho ...

  4. py文件读写

    ''' 1.文件打开 open(文件名,模式) 2.文件关闭filename.close() 模式: 1.r 文件读,指针默认在文件开头 2.w 文件写,指针默认在开头 若有文件,则打开时写入覆盖原文 ...

  5. 对TCP/IP协议的理解

    话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就 ...

  6. Windows 环境使用 Xshell 连接 VMware 虚拟机上的 CentOS 系统

    1.VMware 点击虚拟机的设置,打开弹窗,网络使用 NAT 模式 2.VMware 菜单栏:点击 编辑>>>虚拟网络编辑器 (1)选择 VMnet8 (2)选择 NAT 模式 ( ...

  7. JavaScript知识总结 异步编程篇

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 异步编程的实现方式? JavaScript中的异步机制可以分为以下几种: 回调函数 的方式,使用回调函数的方式有一个缺点是,多个回调 ...

  8. 记录--关于无感刷新Token,我是这样子做的

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 什么是JWT JWT是全称是JSON WEB TOKEN,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可 ...

  9. Unity中文字体获取

    Unity对中文字体支持较差,这里给出了几个可以使用的中文字体下载网站 后续会更新如何使用: 51Font -「免费字体发布平台」为您第一时间发布商用免费字体开源字体 (17font.com) fre ...

  10. quartus之LPM_COMPARE测试

    quartus之LPM_COMPARE测试 1.IP描述 比较器的IP,可以比较两路数据是否相等.相等输出为1,不等输出为0的aeb信号是需要测试的量. 2.基础测试 module compare_t ...