Mysql差距和岛屿问题?

时间:2016-01-01 17:11:24

标签: mysql sql gaps-and-islands

想要计算总分数大于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 

谷歌解决这个问题,我最终试图通过差距和岛屿来解决我的问题。

这是我的解决方案但不起作用。想法只是在没有发生时将差距/岛屿重置为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

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

我想你是在这样的事情之后......

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;