[每日一练]窗口函数的第一次练习

#该题目来源于力扣:

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 BY
    ORDER BY
    FRAME_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值