Mysql 间隙和孤岛问题?

Mysql gaps and islands issue?

想要计算总得分高于 60 的事件与未发生此事件的行数之间的行数。 例如,第 5 场和第 6 场比赛最终会超过 60,因此将计算 5 行不是 60 和 2 行是 60。

我想要这样的东西:

type                 count
no-60-gap            5
yes-60-island        1
no-60-gap            3
yes-60-island        2

我有简单的篮球比赛数据库。下面的粗略示例

id, home,    score_home,  away,     score_away, round
1,  team_1,  33,          team_2,   23,         1 
2,  team_4,  31,          team_1,   33,         1 
3,  team_2,  36,          team_5,   53,         2 
4,  team_5,  35,          team_1,   63,         2 
5,  team_7,  31,          team_8,   53,         3 
6,  team_2,  30,          team_1,   43,         3 
7,  team_1,  39,          team_3,   13,         4 

正在 google-解决这个问题,我最终试图用间隙和孤岛来解决我的问题。

这是我的解决方案,但它不起作用。想法只是在没有发生时将 gap/island 重置为 0。 我是新手。

SET @gap :=0; SET @island :=0;
SELECT 
@gap, 
@island
FROM (
SELECT 
CASE 
    WHEN (score_home + score_away) >= 60 THEN @island:=@island+1 
    WHEN (score_home + score_away) >= 60 THEN @gap:=0 
END,
CASE 
    WHEN (score_home + score_away) < 60 THEN @island:=0 
    WHEN (score_home + score_away) < 60 THEN @gap:=@gap+1
END
FROM basket

) AS games

感谢任何帮助

我想你正在寻找这样的东西......

SELECT v,flag,COUNT(*)
  FROM 
     ( SELECT flag
            , CASE WHEN @prev = flag THEN @v:=@v ELSE @v:=@v+1 END v
            , @prev:=flag
         FROM 
            ( SELECT *, score_home + score_away >= 60 flag FROM my_table ) x
         JOIN
            ( SELECT @prev:=NULL,@v:=0) vars
        ORDER
           BY id
     ) n
 GROUP
    BY v,flag;