Leetcode1303. 求团队人数(简单)

题目

员工表:Employee

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| employee_id   | int     |
| team_id       | int     |
+---------------+---------+

employee_id 字段是这张表的主键,表中的每一行都包含每个员工的 ID 和他们所属的团队。
编写一个 SQL 查询,以求得每个员工所在团队的总人数。

查询结果中的顺序无特定要求。

查询结果格式示例如下:

Employee Table:

+-------------+------------+
| employee_id | team_id    |
+-------------+------------+
|     1       |     8      |
|     2       |     8      |
|     3       |     8      |
|     4       |     7      |
|     5       |     9      |
|     6       |     9      |
+-------------+------------+

Result table:

+-------------+------------+
| employee_id | team_size  |
+-------------+------------+
|     1       |     3      |
|     2       |     3      |
|     3       |     3      |
|     4       |     1      |
|     5       |     2      |
|     6       |     2      |
+-------------+------------+

ID 为 1、2、3 的员工是 team_id 为 8 的团队的成员,
ID 为 4 的员工是 team_id 为 7 的团队的成员,
ID 为 5、6 的员工是 team_id 为 9 的团队的成员。


先查询各个team的大小

select E.team_id, count(*) as team_size
from Employee as E
group by E.team_id

两表连接即可

select  EE.employee_id, tmp.team_size
from Employee as EE
join (select E.team_id, count(*) as team_size
from Employee as E
group by E.team_id)
on EE.team_id = tmp.team_id

别的解答

不擅长写这种。。

select employee_id,
    (select count(*) from Employee e2
        where e1.team_id = e2.team_id) as team_size
from Employee e1

直接两表连接即可 按照team_id相连 对左表的employee_id分组 再统计数量 即为和它一组的员工的数量 也就是 team_size

select e1.employee_id, count(*) team_size
from employee e1 left join employee e2
on e1.team_id = e2.team_id
group by e1.employee_id;

你可能感兴趣的:(Leetcode1303. 求团队人数(简单))