每个员工所在团队的人数:窗口计数不用回表
LeetCode 1303 · 窗口 COUNT、明细保留
面试怎么回答
COUNT(*) OVER (PARTITION BY team_id),既保留每个员工一行,又拿到团队人数。GROUP BY 会压缩行数,窗口聚合不会,这是两者最本质的区别。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
题意
员工表记录每个员工所属的团队。输出每个员工 ID 以及他所在团队的总人数。
表结构
- Employee:employee_id(主键)、team_id
思路
既要保留每个员工的明细,又要团队级别的人数,正是窗口聚合的场景:COUNT(*) OVER (PARTITION BY team_id) 把团队人数挂到每一行上。不用窗口的话,要先按团队分组计数再关联回员工表。
参考解法
select employee_id,count(*) over(partition by team_id) team_size
from Employee
易错点
- 用 GROUP BY team_id 会把明细聚合掉,拿不到每个员工的行。