LeetCode--1308. 不同性别每日分数总计

96 阅读3分钟

1 题目描述

表: Scores

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| player_name   | varchar |
| gender        | varchar |
| day           | date    |
| score_points  | int     |
+---------------+---------+

(gender, day)是该表的主键(具有唯一值的列的组合) 一场比赛是在女队和男队之间举行的 该表的每一行表示一个名叫 (player_name) 性别为 (gender) 的参赛者在某一天获得了 (score_points) 的分数 如果参赛者是女性,那么 gender 列为 'F',如果参赛者是男性,那么 gender 列为 'M'

编写解决方案统计每种性别在每一天的总分。 返回按 gender 和 day 对查询结果 升序排序 的结果。

2 测试用例

输入:

Scores表:

+-------------+--------+------------+--------------+
| player_name | gender | day        | score_points |
+-------------+--------+------------+--------------+
| Aron        | F      | 2020-01-01 | 17           |
| Alice       | F      | 2020-01-07 | 23           |
| Bajrang     | M      | 2020-01-07 | 7            |
| Khali       | M      | 2019-12-25 | 11           |
| Slaman      | M      | 2019-12-30 | 13           |
| Joe         | M      | 2019-12-31 | 3            |
| Jose        | M      | 2019-12-18 | 2            |
| Priya       | F      | 2019-12-31 | 23           |
| Priyanka    | F      | 2019-12-30 | 17           |
+-------------+--------+------------+--------------+

输出:

+--------+------------+-------+
| gender | day        | total |
+--------+------------+-------+
| F      | 2019-12-30 | 17    |
| F      | 2019-12-31 | 40    |
| F      | 2020-01-01 | 57    |
| F      | 2020-01-07 | 80    |
| M      | 2019-12-18 | 2     |
| M      | 2019-12-25 | 13    |
| M      | 2019-12-30 | 26    |
| M      | 2019-12-31 | 29    |
| M      | 2020-01-07 | 36    |
+--------+------------+-------+

解释: 女性队伍: 第一天是 2019-12-30,Priyanka 获得 17 分,队伍的总分是 17 分 第二天是 2019-12-31, Priya 获得 23 分,队伍的总分是 40 分 第三天是 2020-01-01, Aron 获得 17 分,队伍的总分是 57 分 第四天是 2020-01-07, Alice 获得 23 分,队伍的总分是 80 分

男性队伍: 第一天是 2019-12-18, Jose 获得 2 分,队伍的总分是 2 分 第二天是 2019-12-25, Khali 获得 11 分,队伍的总分是 13 分 第三天是 2019-12-30, Slaman 获得 13 分,队伍的总分是 26 分 第四天是 2019-12-31, Joe 获得 3 分,队伍的总分是 29 分 第五天是 2020-01-07, Bajrang 获得 7 分,队伍的总分是 36 分

3 解题思路

  1. 题目要求对genderday分组统计,每种gender在每一天的得分统计,需要注意是累计得分(需要统计<=当前日期的得分),可以使用窗口函数sum(score_points) over (partition by gender order by day)实现累加得分
select gender, day, sum(score_points) over (partition by gender order by day) as total  
from Scores

执行结果

+------+----------+-----+
|gender|day       |total|
+------+----------+-----+
|F     |2019-12-30|17   |
|F     |2019-12-31|40   |
|F     |2020-01-01|57   |
|F     |2020-01-07|80   |
|M     |2019-12-18|2    |
|M     |2019-12-25|13   |
|M     |2019-12-30|26   |
|M     |2019-12-31|29   |
|M     |2020-01-07|36   |
+------+----------+-----+

不需要单独对gender进行排序,默认情况会按照字母顺序排序 sum() over()使用MySQL常用函数