gpt4 book ai didi

一个团队的 MySQL 连胜纪录

转载 作者:可可西里 更新时间:2023-11-01 06:33:38 29 4
gpt4 key购买 nike

我有一个 SQL 查询,返回下表关于一个团队:

date         gameid     pointsfor     pointsagainst

2011-03-20 15 1 10
2011-03-27 17 7 3
2011-04-03 23 6 5
2011-04-10 30 5 4
2011-04-17 35 4 8
2011-05-01 38 8 1
2011-05-08 43 3 7
2011-05-15 48 6 2
2011-05-22 56 10 2
2011-05-29 59 4 5
2011-06-05 65 2 3
2011-06-19 71 5 6
2011-06-19 74 12 2
2011-06-19 77 5 2
2011-06-19 80 5 4

谁能根据这张表帮我算出最长的连胜和连败是多少?

我已经看过这里的其他一些示例,但很难理解它们,因为它们与我的不太一样。任何帮助将不胜感激。谢谢!

最佳答案

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

内部查询会预先确定游戏状态为“W”in 或“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 更改为 case/when 条件来进行调整

@CurStatus := case when YR.PointsFor > YR.PointsAgainst then 'W'
when YR.PointsFor < YR.PointsAgainst then 'L'
else 'T' end as GameResult,

关于一个团队的 MySQL 连胜纪录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10478295/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com