仅从 MySql 中最近的比赛中获取玩家的总得分

Posted

技术标签:

【中文标题】仅从 MySql 中最近的比赛中获取玩家的总得分【英文标题】:Get the total score of players from only a recent number of matches in MySql 【发布时间】:2017-12-26 13:18:43 【问题描述】:

mysql 名为 match_info 的表大致是这样的 -

    match_no | player_id | score

       1     |  1        |  50
       1     |  2        |  12
       2     |  1        |  10
       2     |  2        |  14
       3     |  1        |  11
       3     |  2        |  30

实际的表包含比这更多的数据。无论如何,为了举例,让我们说这是现在的表格。我想要的是找到每个球员在最近几场比赛中的总分。例如说现在我只需要计算最近的 2 场比赛。所以只匹配没有。应该计算 3 和 2,我的输出应该是 -

player_id |  score
  2       |   44
  1       |   21

我该怎么做? 我尝试了以下 -

SELECT player_id,SUM(score) as total_score 
FROM  match_info 
where match_no IN
(select match_no 
from match_info 
ORDER BY match_no DESC LIMIT 2)
group by player_id 
order by total_score desc;

然而我遇到的错误是——

此版本的 MariaDB 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”

所以我不能在“IN”子查询中使用限制。我可以使用什么替代方法?

【问题讨论】:

【参考方案1】:

尝试使用此查询,它按预期工作。

SELECT player_id, SUM(score) FROM match_info m1 INNER JOIN (SELECT DISTINCT match_no FROM match_info ORDER BY match_no DESC LIMIT 2) m2 ON m1.`match_no` = m2.match_no GROUP BY `player_id` ORDER BY `player_id`

【讨论】:

非常感谢。它就像一个魅力:D ...我之前确实提出了一个使用 MAX 和比较运算符的解决方案,但您的解决方案似乎要好得多。【参考方案2】:

您可以尝试“加入”临时表与您想要比较的值,这将允许更多查询优化。

【讨论】:

试过了,但并不完全奏效。所以不知道该怎么做。

以上是关于仅从 MySql 中最近的比赛中获取玩家的总得分的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 5379. 石子游戏 III(第183场周赛)

加入排除上一场比赛

如何根据分数查找1对1比赛的评分?

TableView 中 RadioButton 的奇怪行为

获得池中每个人每月的前 3 名

如何保持一共得了多少分