570. 至少有5名直接下属的经理(中等)

在给定的Employee表中,我们需要找到那些至少管理5名直接下属的经理。通过内连接和COUNT()函数,我们可以确定每个经理的下属数量,并筛选出满足条件的经理。查询结果返回了名字为'John'的经理,因为他在表中拥有5个直接下属。
摘要由CSDN通过智能技术生成
  • Employee 表包含所有员工和他们的经理。每个员工都有一个 Id,并且还有一列是经理的 Id。

    • +------+----------+-----------+----------+
      |Id    |Name 	  |Department |ManagerId |
      +------+----------+-----------+----------+
      |101   |John 	  |A 	      |null      |
      |102   |Dan 	  |A 	      |101       |
      |103   |James 	  |A 	      |101       |
      |104   |Amy 	  |A 	      |101       |
      |105   |Anne 	  |A 	      |101       |
      |106   |Ron 	  |B 	      |101       |
      +------+----------+-----------+----------+
      
  • 给定 Employee 表,请编写一个SQL查询来查找至少有5名直接下属的经理。对于上表,您的SQL查询应该返回:

    • +-------+
      | Name  |
      +-------+
      | John  |
      +-------+
      
  • 注意:
    没有人是自己的下属。

  • 解答

    • select e.name FROM employee e
      INNER JOIN
      (
      select managerID,COUNT(1) as count 
      from employee GROUP BY managerID
      ) t 
      on e.Id = t.managerID AND t.count>=5
      
  • 知识点总结

    • 内连接的使用
    • count()函数的使用
571. 给定数字的频率查询中位数(困难)
  • Numbers 表:

    • +-------------+------+
      | Column Name | Type |
      +-------------+------+
      | num         | int  |
      | frequency   | int  |
      +-------------+------+
      num 是这张表的主键。这张表的每一行表示某个数字在该数据库中的出现频率。
      
  • 中位数 是将数据样本中半数较高值和半数较低值分隔开的值。

  • 编写一个 SQL 查询,解压 Numbers 表,报告数据库中所有数字的 中位数 。结果四舍五入至 一位小数

  • 查询结果如下例所示。

    • 输入: 
      Numbers 表:
      +-----+-----------+
      | num | frequency |
      +-----+-----------+
      | 0   | 7         |
      | 1   | 1         |
      | 2   | 3         |
      | 3   | 1         |
      +-----+-----------+
      输出:
      +--------+
      | median |
      +--------+
      | 0.0    |
      +--------+
      解释:
      如果解压这个 Numbers 表,可以得到 [0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3] ,所以中位数是 (0 + 0) / 2 = 0 。
      
  • 解答

    • select 
          round(avg(num),1) as median 
      from
      (select
          a.*,
          sum(frequency) over(order by num) as rnk1,
          sum(frequency) over(order by num desc) as rnk2,
          sum(frequency) over() as s
      from Numbers a) tmp
      where rnk1>=s/2 
      and rnk2>=s/2
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨染~残阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值