leetcode 1303 - Find the Team Size
Description
Table: Employee
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| employee_id | int |
| team_id | int |
+---------------+---------+
employee_id is the primary key for this table.
Each row of this table contains the ID of each employee and their respective team.
Write an SQL query to find the team size of each of the employees.
Return result table in any order.
The query result format is in the following example:
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 |
+-------------+------------+
Employees with Id 1,2,3 are part of a team with team_id = 8.
Employees with Id 4 is part of a team with team_id = 7.
Employees with Id 5,6 are part of a team with team_id = 9.
Solution
using join
Join table Employee
with itself using the field team_id
. Then for each employee_id
, obtain the number of entries and use it as team_size
.
CREATE table Employee(
employee_id int,
team_id int
);
insert into Employee VALUES(1,3),(2,3),(3,3),(4,1),(5,2),(6,2);
select e1.employee_id,count(*) as team_size from
Employee e1 left join Employee e2 on e1.team_id=e2.team_id group by e1.employee_id;
using windows function
select employee_id, count(employee_id)
over(partition by team_id order by team_id) as team_size from
Employee order by employee_id;
output