2017-07-20 34 views
1

我叫match_info大致MySQL表看起来是这样的 -获取玩家的总得分只从最近的数场比赛中的MySql

match_no | player_id | score 

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

实际表包含比这更多的数据。无论如何,为了举例,现在让我们说这是表格。我想要的是找出每个玩家对于选定数量的最近比赛的总得分。比如说现在我只需要计算两次最近的比赛。所以只匹配不。 3和2应计数,我的输出应该是 -

player_id | score 
    2  | 44 
    1  | 21 

我该怎么做? 我尝试以下 - 我遇到的是 -

这MariaDB的版本尚不支持 'LIMIT & IN/ALL/ANY/SOME子查询'

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; 

但是错误

所以我不能在“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` 
+0

非常感谢。它的作用就像一个魅力:D ...我前一段时间使用MAX和比较运算符提出了一个解决方案,但是您的解决方案看起来好多了。 – Tasfia

0

您可以尝试“加入”与临时表的数值进行比较,以便进行更多的查询优化。

+0

尝试过,但它并没有完全解决。所以不知道该怎么做。 – Tasfia