返回介绍

solution / 1300-1399 / 1303.Find the Team Size / README

发布于 2024-06-17 01:03:21 字数 2259 浏览 0 评论 0 收藏 0

1303. 求团队人数

English Version

题目描述

员工表: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 的团队的成员。

解法

方法一:分组统计 + 等值连接

我们可以先统计出每个团队的人数,记录在 T 表中,然后我们将 Employee 表与 T 表按照 team_id 进行等值连接,即可得到每个员工所在团队的总人数。

# Write your MySQL query statement below
WITH
  T AS (
    SELECT team_id, COUNT(1) AS team_size
    FROM Employee
    GROUP BY 1
  )
SELECT employee_id, team_size
FROM
  Employee
  JOIN T USING (team_id);

方法二:左连接

我们也可以使用左连接,将 Employee 表按照 team_id 进行自连接,然后按照 employee_id 进行分组,统计每个员工所在团队的总人数。

# Write your MySQL query statement below
SELECT e1.employee_id, COUNT(1) AS team_size
FROM
  Employee AS e1
  LEFT JOIN Employee AS e2 USING (team_id)
GROUP BY 1;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文