【SQL】1731. 每位经理的下属员工数量 ( 新思想:确定左表,依次添加后续字段)

64 篇文章 1 订阅

在这里插入图片描述


leetcode题目链接

注意点

  1. 确定左表(即,确定result表中的主键),依次添加后续字段。注意:主键可能是一个字段,也可能是多个字段
  2. COUNT(DISTINCT()),一般为了防止重复,使用COUNT计数时,一般带着DISTINCT(),不然就跟COUNT(1)、COUNT(常数)一样了。
  3. 一般,非聚合字段都要group by

写法一:思想:( 确定左表,依次添加后续字段)

select a.employee_id, b.name, reports_count, average_age
from (
  select reports_to as employee_id, 
        count(distinct(employee_id)) as reports_count, round(AVG(age)) as average_age
  from employees
  where reports_to is not null
  group by reports_to
  ) a 
left join (
  select employee_id, name
  from employees
  group by employee_id, name
  ) b
on a.employee_id = b.employee_id
order by employee_id asc

写法二:内连接

# 写法二
select a.employee_id, a.name, count(distinct(b.employee_id)) as reports_count, 
       round(avg(b.age)) as average_age 
from employees a
inner join employees b
on a.employee_id = b.reports_to
group by a.employee_id, a.name
# 注意:非聚合字段都要group by
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值