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 isnotnullgroupby reports_to
) a
leftjoin(select employee_id, name
from employees
groupby employee_id, name
) b
on a.employee_id = b.employee_id
orderby 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
innerjoin employees b
on a.employee_id = b.reports_to
groupby a.employee_id, a.name
# 注意:非聚合字段都要group by