想要计算总得分高于 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 解决了这个问题,我最终试图用间隙和孤岛来解决我的问题。
这是我的解决方案,但它不起作用。想法只是在没有发生时将间隙/岛重置为 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;
关于Mysql 差距和孤岛问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558184/