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;
想要计算总得分高于 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;