Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:基于条件的单列前n条和后n条记录之和_Mysql_Sql_Phpmyadmin - Fatal编程技术网

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

MySQL:基于条件的单列前n条和后n条记录之和,mysql,sql,phpmyadmin,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

是否可以从单个列计算前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
SELECT player_key, 
    sum(runs) as first5overSum
FROM `batsman_scores`
WHERE over<=5 
group by player_key
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
现在,它应该计算每个球员的前五局和后五局的总和,并告诉我哪些球员在前五局中得分多少,以及他们在最后五局中得分多少

players first5overSum last5overSum

 p1        40               0
 p2        50             120
 p3        10              60
MySQL查询如下所示:

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
SELECT player_key, 
    sum(runs) as first5overSum
FROM `batsman_scores`
WHERE over<=5 
group by player_key
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
我能够计算出前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
SELECT player_key, 
    sum(runs) as first5overSum
FROM `batsman_scores`
WHERE over<=5 
group by player_key
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

你说的前五个是什么意思?这意味着前五个是什么意思?根据你的数据p1有两个overs overs=1,2,那么你如何得到p1的第一个和最后五个呢?这是一种澄清的方式,确保你得到人们的帮助!英雄联盟“第一个”和“最后一个”表示排序顺序-您可能希望通过解释您的意思以及如何确定前5个和后5个来重新回答一个合法的问题。您想要投票吗?参见前5次表示=>前5次和后5次