嗨,我在尝试根据最近 4 场比赛的结果生成足球桌时遇到问题,这是我用来根据所有结果生成表格的代码,它工作正常:
选择 球队, 计数(*)比赛, 计数(当进球数 > 进球数为 1 场)获胜, 数数(进球数> 进球数为1 场数)输, 数(当进球数= 进球数为 1 场)平局, 总和(目标为)目标, 总和(目标反)目标反, 总和(目标)-总和(目标)目标_差异, 总和( 如果目标为>目标反则为3,否则为0结束 +如果目标为=目标反则为1,否则为0结束 )得分 ( 选择主队)球队,进球数,进球数 联盟都 选择客队,进球数,进球数 ) 小组 按分数 desc、goal_diff desc 排序;
这是表
身份证 | 主队| 离开 | 目标| 进球| 时间 | 数据 1 | 团队| 团队b | 3 | 2 | 13:00| 2016-04-21 2 | 团队c | 团队b | 4 | 1 | 13:00| 2016-04-19
我不知道如何只为所有球队选择最后 4 场比赛,我尝试过的最近一场比赛:
( 从比分 联盟中 选择主队、进球、进球全部选择客队、进球、进球,其中数据>2016-03-21 )
但有些球队在那段时间只打了一场比赛,其他球队 4
您的FROM
子查询几乎就在那里,但您需要包含日期。
from (
select hometeam team, goalsfor, goalsagainst, date from scores
union all
select awayteam team, goalsagainst, goalsfor, date from scores
) a
现在您需要选择每支球队的最后 4 场比赛,为此您需要使用变量。
SELECT *
FROM (
SELECT A.*,
@rn := IF( @team = team,
@rn + 1,
IF( @team := team, 1, 1)
) as rn
FROM (
select hometeam team, goalsfor, goalsagainst, date from scores
union all
select awayteam team, goalsagainst, goalsfor, date from scores
) a
CROSS JOIN ( SELECT @rn := 0, @team := '' ) as var
ORDER BY team, date DESC
) T
WHERE T.rn <= 4
ORDER BY team, rn
现在您可以对该结果进行聚合:
SELECT team, count(*), .....
FROM ( /* previous query */ ) as F
GROUP BY team
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句