订阅更新

每个员工所在团队的人数:窗口计数不用回表

SQL 实战 123 题 · 第 90 题 简单 约 2 分钟读完

LeetCode 1303 · 窗口 COUNT、明细保留

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

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 会把明细聚合掉,拿不到每个员工的行。
刷题进度保存在当前浏览器