男女队每日累计总分
LeetCode 1308 · 分区累计求和
面试怎么回答
SUM(score_points) OVER (PARTITION BY gender ORDER BY day) 得到分性别的累计分,外层 ORDER BY gender, day。我会强调窗口里的排序只决定计算顺序,不决定输出顺序。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
题意
分数表记录每个参赛者的性别、日期和得分,同一性别每天只有一条记录。输出每种性别在每一天截至当天的累计总分,按性别和日期排序。
表结构
- Scores:player_name、gender、day、score_points;(gender, day) 为主键
思路
按性别分区、按日期排序做 SUM 窗口,就是分组累计。最后按性别、日期排序输出。
参考解法
select gender , day ,sum( score_points) over(partition by gender order by day) total
from Scores
易错点
- 题目要求结果排序,窗口里的 ORDER BY 不保证最终输出顺序,外层要再写 ORDER BY。