表: 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’
问题
写一条SQL语句查询每种性别在每一天的总分,并按性别和日期对查询结果排序
示例
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 |
Result表:
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 分
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/running-total-for-different-genders
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
法一:窗口函数
select gender,day,
sum(score_points) over(partition by gender order by day) total
from scores
order by gender,day
法二:定义变量
select gender,day,
case when gender = 'F' then @pot1 := @pot1+score_points
else @pot2 := @pot2+score_points
end total
from scores ,(select @pot1 :=0,@pot2 :=0) a
order by gender,day