团队mysql_一个团队的MySQL Winning Streak

您必须实现一些MySQL变量来帮助更有效地处理这个问题,而不是多个查询/加入/分组.这只有一次通过所有记录,然后再次获得每种类型的赢/输(或平局)的最大值.我假设您提供的数据是一次性的,而日期是游戏的明显顺序……积分是您感兴趣的团队,并且反对的是对手是谁.也就是说,我的“别名”名称将是“YourResultSingleTeam”.

内部查询将预先确定游戏的状态为“W”或“L”oss.然后,查看该值是否与团队的上一个实例相同.如果是,请将1添加到现有的赢/输计数器中.如果没有,请将计数器设置回1.然后,将当前游戏的状态恢复为“LastStatus”值,以便与下一个游戏进行比较.

完成后,它是一个简单的游戏结果,max()按游戏结果状态分组

select

StreakSet.GameResult,

MAX( StreakSet.WinLossStreak ) as MaxStreak

from

( select YR.Date,

@CurStatus := if( YR.PointsFor > YR.PointsAgainst, 'W', 'L' ) as GameResult,

@WinLossSeq := if( @CurStatus = @LastStatus, @WinLossSeq +1, 1 ) as WinLossStreak,

@LastStatus := @CurStatus as carryOverForNextRecord

from

YourResultSingleTeam YR,

( select @CurStatus := '',

@LastStatus := '',

@WinLossSeq := 0 ) sqlvars

order by

YR.Date ) StreakSet

group by

StreakSet.GameResult

正如Nikola所提出的,如果你想考虑“平局”游戏,我们可以通过将@CurStatus更改为案例/条件来调整

@CurStatus := case when YR.PointsFor > YR.PointsAgainst then 'W'

when YR.PointsFor < YR.PointsAgainst then 'L'

else 'T' end as GameResult,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值