MySQL:基于条件的单列的前n个和后n个记录的总和

时间:2018-03-11 11:42:24

标签: mysql sql phpmyadmin

是否可以计算单个列中前5个过滤和后5个过滤的总和?我处于一种情况,我必须使用查询来计算它。

我必须计算前5个的总和并将其显示在不同的列中,同样地,我必须计算最后5个过的总和并将其显示在另一个列中。我的表看起来像这样:

Overs runs players

1   1     p1           
1   1     p2
1   4     p2
1   1     p2
1   0     p1
1   0     p1
2   1     p2
2   2     p1
2   3     p1
2   1     p2

现在它应该计算前5个超额总和并计算每个球员的最后5个超额总和,并告诉我哪些球员在前5个球中得分多少以及他们在过去5个比赛得分多少。

players first5overSum last5overSum

 p1        40               0
 p2        50             120
 p3        10              60

MySQL查询如下所示:

SELECT player_key, 
    sum(runs) as first5overSum
FROM `batsman_scores`
WHERE over<=5 
group by player_key

我可以计算前5次的记录,但我不知道如何将每位玩家的最后5次超额总和显示出来并显示出来。

请给我建议或解决方案。我将非常感激!

1 个答案:

答案 0 :(得分:1)

我认为你可以使用条件聚合。我不太确定“前五个”和“后五个”是什么意思,但查询看起来像这样:

SELECT bs.player_key, 
       SUM(CASE WHEN bs.over <= 5 THEN bs.runs ELSE 0 END) as first5overSum,
       SUM(CASE WHEN bs.over > bs2.max_over - 5 THEN bs.runs ELSE 0 END) as last5overSum,
FROM batsman_scores bs CROSS JOIN
     (SELECT MAX(bs2.over) as max_over
      FROM batsman_scores bs2
     ) bs2
WHERE bs.over <= 5 
GROUP BY bs.player_key