使用mysql确定连续条纹

pbpqsu0x  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(734)

例如:

GAME_ID   GOALIEID    TEAMID    TEAMSHOTNUM  OVERALLSHOT   SCORED
2001        57          11            1            1          Y
2001        41          22            1            2          N
2001        57          11            2            3          N
2001        41          22            2            4          N
2001        57          11            3            5          N
2001        41          22            3            6          Y
2001        57          11            4            7          N
2001        41          22            4            8          Y

基于这个简单的例子:我如何查询最连续的“扑救”,也就是一个“守门员”的“n”,现在想象我的数据有多个游戏要看,但为了简单起见,我这里只有一个游戏。
我希望我的结果是这样的:

GAME_ID     GOALIEID     STREAK
  2001        57           3

这将表明“守门员”57在点球大战中连续3次扑救,表明连续最高的扑救次数实际上是3次。请记住,这将跨越成千上万的游戏。但我只玩了一场就简单了。

iswrvxsc

iswrvxsc1#

可以使用使用会话变量的方法。对所有人都有用 GAME_ID 以及 GOALIEID 组合。
为了正确使用会话变量,我们首先需要对数据集进行排序。所以在一个派生表中,我们按照 GAME_ID , GOALIEID ,和 OVERALLSHOT ; 因为一个独特的连胜是为守门员在特定的比赛中定义的。
现在,我们使用这个有序数据集来确定条纹。我们利用 If() 条件逻辑的函数。这里的逻辑是如果我们遇到一个目标( SCORED = 'Y' ),我们将条纹数设置为0(因为它已被破坏);如果上一个 GAME_ID 以及 GOALIEID 和电流一样,我们增加我们的条纹数;否则,将“条纹数”(streak number)设置为1
现在,我们只需再次将此数据集用作派生表 Group ByGAME_ID 以及 GOALIEID ,并使用 Max() 函数用于确定特定游戏和守门员的最大连胜数。
您还可以参考本教程,说明如何使用会话变量计算行号。
尝试以下代码以获得最大条纹:

SELECT 
  dt.GAME_ID, 
  dt.GOALIEID, 
  MAX(dt.STREAK) AS STREAK 
FROM 
(
  SELECT 
    @streak := IF(t1.SCORED = 'Y', 
                  0, 
                  IF(@gameid = t1.GAME_ID AND 
                     @goalieid = t1.GOALIEID, 
                     @streak + 1, 
                     1)
                 ) AS STREAK, 
    @gameid := t1.GAME_ID AS GAME_ID, 
    @goalieid := t1.GOALIEID AS GOALIEID 
  FROM 
  (
    SELECT 
      GAME_ID, 
      GOALIEID, 
      SCORED 
    FROM your_table 
    ORDER BY GAME_ID, GOALIEID, OVERALLSHOT ) AS t1 
  CROSS JOIN (SELECT @gameid := 0, 
                     @goalieid := 0, 
                     @streak := 0) AS init_params 
) AS dt 
GROUP BY dt.GAME_ID, dt.GOALIEID

rextester演示
输出:

相关问题