#该题目来源于力扣:
1303. 求团队人数 - 力扣(LeetCode)
题目要求:
员工表:Employee+---------------+---------+
| Column Name | Type |
+---------------+---------+
| employee_id | int |
| team_id | int |
+---------------+---------+
employee_id 字段是这张表的主键(具有唯一值的列)
表中的每一行都包含每个员工的 ID 和他们所属的团队。编写解决方案以求得每个员工所在团队的总人数。返回结果表 无顺序要求 。返回结果格式示例如下:示例 1:输入:
Employee Table:
+-------------+------------+
| employee_id | team_id |
+-------------+------------+
| 1 | 8 |
| 2 | 8 |
| 3 | 8 |
| 4 | 7 |
| 5 | 9 |
| 6 | 9 |
+-------------+------------+
输出:
+-------------+------------+
| 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 的团队的成员。
思路流程:
意思就是要求把聚合的函数全部返回到原来的数据集中。遇到这种为每一行数据都返回一个结果的要求,我们可以用到窗口函数。
窗口函数的语法:
window_function ([expression]) over(PARTITION BYORDER BYFRAME_CLAUSE
)
/*PARTITION 相当于GroupBy
ORDER BY 排序
FRAME_CLAUSE 窗口大小*/
可见这里的聚合函数只用到了分组需求,所以对聚合函数使用窗口函数表示,会将聚合的数据返回到每一行中去。
# Write your MySQL query statement below
select employee_id,
count(team_id) over(PARTITION BY team_id) as team_size
from Employee