想要计算总分数大于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
感谢任何帮助
答案 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;