【发布时间】:2020-10-17 20:22:27
【问题描述】:
我正在尝试根据另一列的分组在多列上创建运行总计。
从Running total with in each group using MySQL 此处答案中的方法开始,我可以将其用于总计一列,但之后的任何其他列都会计算运行总计 - 分组被忽略。
示例数据 - 游戏桌
|TeamID|GameID| w| l|
|------|------|--|--|
| 1| 1| 1| 0|
| 1| 2| 0| 1|
| 1| 3| 1| 0|
| 1| 9| 0| 1|
| 1| 10| 1| 0|
| 2| 4| 1| 0|
| 2| 5| 1| 0|
| 2| 6| 1| 0|
| 2| 7| 0| 1|
| 2| 8| 0| 1|
| 3| 1| 0| 1|
| 3| 2| 1| 0|
| 3| 3| 0| 1|
| 3| 7| 1| 0|
| 3| 8| 1| 0|
| 4| 4| 0| 1|
| 4| 5| 0| 1|
| 4| 6| 0| 1|
| 4| 9| 1| 0|
| 4| 10| 0| 1|
期望的结果 - 累积的 w 和 l,按 TeamID 分组
|TeamID|GameID| w| l|cum_w|cum_l| Pct|
|------|------|--|--|-----|-----|------|
| 1| 1| 1| 0| 1| 0| 1.000|
| 1| 2| 0| 1| 1| 1| .500|
| 1| 3| 1| 0| 2| 1| .667|
| 1| 9| 0| 1| 2| 2| .500|
| 1| 10| 1| 0| 3| 2| .600|
| 2| 4| 1| 0| 1| 0| 1.000|
| 2| 5| 1| 0| 2| 0| 1.000|
| 2| 6| 1| 0| 3| 0| 1.000|
| 2| 7| 0| 1| 3| 1| .750|
| 2| 8| 0| 1| 3| 2| .600|
| 3| 1| 0| 1| 0| 1| .000|
| 3| 2| 1| 0| 1| 1| .500|
| 3| 3| 0| 1| 1| 2| .333|
| 3| 7| 1| 0| 2| 2| .500|
| 3| 8| 1| 0| 3| 2| .600|
| 4| 4| 0| 1| 0| 1| .000|
| 4| 5| 0| 1| 0| 2| .000|
| 4| 6| 0| 1| 0| 3| .000|
| 4| 9| 1| 0| 1| 3| .250|
| 4| 10| 0| 1| 1| 4| .200|
我修改了上面链接中的代码并正在运行它...(我什至还没有尝试计算 Pct)
select g.*,
(@w := if(@TeamID = TeamID, @w + w,
if(@TeamID := TeamID, w, w)
)
) as cum_w,
(@l := if(@TeamID = TeamID, @l + l,
if(@TeamID := TeamID, l, l)
)
) as cum_l
from (select TeamID, GameID, w, l
from games) g
cross join (select @TeamID := -1, @w := 0, @l := 0) params
order by TeamID, GameID;
我得到了什么。累积 w 有效,累积 l 是忽略 TeamID 的运行总计。如果我删除 cum_w,cum_l 有效。如果我在 select 语句中颠倒顺序,第一个有效,第二个无效
|TeamID|GameID| w| l|cum_w|cum_l|
|------|------|--|--|-----|-----|
| 1| 1| 1| 0| 1| 0|
| 1| 2| 0| 1| 1| 1|
| 1| 3| 1| 0| 2| 1|
| 1| 9| 0| 1| 2| 2|
| 1| 10| 1| 0| 3| 2|
| 2| 4| 1| 0| 1| 2|
| 2| 5| 1| 0| 2| 2|
| 2| 6| 1| 0| 3| 2|
| 2| 7| 0| 1| 3| 3|
| 2| 8| 0| 1| 3| 4|
| 3| 1| 0| 1| 0| 5|
| 3| 2| 1| 0| 1| 5|
| 3| 3| 0| 1| 1| 6|
| 3| 7| 1| 0| 2| 6|
| 3| 8| 1| 0| 3| 6|
| 4| 4| 0| 1| 0| 7|
| 4| 5| 0| 1| 0| 8|
| 4| 6| 0| 1| 0| 9|
| 4| 9| 1| 0| 1| 9|
| 4| 10| 0| 1| 1| 10|
最终,我将有另外两列,其中包含按 TeamID 分组的运行总数,以及在这 10 场比赛中运行 10 场比赛 w & l 和 pct。
【问题讨论】:
标签: mysql