美文网首页
Leetcode1308. 不同性别每日分数总计(中等)

Leetcode1308. 不同性别每日分数总计(中等)

作者: kaka22 | 来源:发表于2020-07-21 22:43 被阅读0次

表: 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           |
+-------------+--------+------------+--------------+

结果表:

+--------+------------+-------+
| 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 分

解答
先按gender再按day进行排序

select *
from Scores as S
order by S.gender, S.day asc;

定义变量pre_gender
时间由于排序是递增的 所以只需判断性别是否改变 不改变累加即可 改变时记为当前得分

select S.gender,
from Scores as S, S.day, 
@total:= if(S.gender = @pre_gender, @total + S.score_points, S.score_points) as total,
@pre_gender:= S.gender
(select @total:=0, @pre_gender:=NULL) as init
order by S.gender, S.day asc;

由于多了一列 则还需一步子查询

select tmp.gender, tmp.day, tmp.total
from (select S.gender,
from Scores as S, S.day, 
@total:= if(select S.gender,
from Scores as S, S.day, 
@total:= if(S.gender = @pre_gender, @total + S.score_points, S.score_points) as total,
@pre_gender:= S.gender
(select @total:=0, @pre_gender:=NULL) as init
order by S.gender, S.day asc) as tmp;

别人的解答
两表连接 连接条件是性别相同 A的时间要大于等于B的时间
这样可以得到与A表性别相同且其时间之前的记录 所以对性别和day分组求和即可

select S1.gender, S1.day, sum(S2.score_points) as total
from Scores as S1
join Scores as S2
on S1.gender = S2.gender and S1.day >= S2.day
group by S1.gender, S1.day
order by S1.gender, S1.day

相关文章

  • Leetcode1308. 不同性别每日分数总计(中等)

    表: Scores (gender, day)是该表的主键一场比赛是在女队和男队之间举行的该表的每一行表示一个名叫...

  • 性别不同,物种不同

    夫妻间总会有这样那样的争执和吵闹。 我的爸爸妈妈也不例外,吵架的内容也无非是些鸡毛蒜皮的小事儿,比如谁干活儿多,谁...

  • 二本压线考生难填志愿?记住这些要点提升录取率90%

    每年高考成绩公布后,中等分数段的考生占据高考人数的大部分。中等分数考生需要考虑得首要问题是:成绩与哪个档次的学校比...

  • 【leetcode】178. 分数排名-中等

    【题目】 编写一个 SQL 查询来实现分数排名。 如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后...

  • 220801成长日记42

    一、每日要事 1、早上听思涵老师讲书《亲密关系》,今天讲了我们在不同阶段对友谊的需要和不同性别的友谊特点。 人们无...

  • 我的成长日记 - 《真实的幸福》读书笔记

    2017.10.26 第6章 未来不全像你想象 本章测试了我的乐观程度和希望分数,我属于中等乐观,希望分数则...

  • 性别不同,怎么相爱?

    前言 我是拉拉,你可以不认同,但请你理解! ——写给的我爱的你 本文的女一号小公举Three,以下简称三哥(好像不...

  • 性别不同怎么相爱

    精彩影评 1、故事开篇确立了一个很有趣的情境,人物写作也把两个男孩子的逆反、懵懂和逃避心理描摹得很细腻;不同的家庭...

  • 性别不同如何恋爱

    今天简书寄的书到了,同事和我一起取快递,就拿过去看了,半天才认出书名是《后背留给我》。就问我,写的是啥,我...

  • 无所适从的初中毕业生家长…

    近日中考分数公布,初三毕业生和家长开始为选择学校而奔波。分数高的自然选择重点高中,分数中等的犯了愁。 上普高吧,不...

网友评论

      本文标题:Leetcode1308. 不同性别每日分数总计(中等)

      本文链接:https://www.haomeiwen.com/subject/mhdgkktx.html