【发布时间】:2016-02-10 23:57:14
【问题描述】:
我想知道是否有人可以帮助我将递增变量(列)添加到我在 MySQL 中使用现有列创建的表中。我能够创建一个首发投手日志表,其中包括首发投手在多个赛季中开始的每场比赛的允许跑动、赢得跑动、投出的局数、允许的本垒打、安打等。我是从我设置的 MySQL 中 MLB 数据的 Retrosheet 数据库中制作出来的。我用来从数据库中建立这个表的代码如下:
DROP TABLE IF EXISTS starting_pitcher_game_log;
CREATE TABLE starting_pitcher_game_log
SELECT a .PIT_ID
, g.GAME_ID
, IF(g.WIN_PIT_ID = a.PIT_ID,1,0) AS W
, IF(g.LOSE_PIT_ID = a.PIT_ID,1,0) AS L
, a.IP
, a.BFP
, a.H
, a.R
, a.ER
, a.HR
, a.BB
, a.K
, a.IBB
, a.HBP
, a.WP
, a.BALK
FROM (
SELECT PIT_ID , GAME_ID
, SUM(EVENT_OUTS_CT)/3 AS IP
, SUM(IF(BAT_EVENT_FL = "T",1,0)) AS BFP
, SUM(IF(H_CD>0,1,0)) AS H
, SUM(IF(BAT_FATE_ID>3,1,0)) AS R
, SUM(IF(BAT_FATE_ID IN (4,6),1,0)) AS ER
, SUM(IF(H_CD = 4,1,0)) AS HR
, SUM(IF(EVENT_CD IN (14,15),1,0)) AS BB
, SUM(IF(EVENT_CD = 3,1,0)) AS K
, SUM(IF(EVENT_CD = 15,1,0)) AS IBB
, SUM(IF(EVENT_CD = 16,1,0)) AS HBP
, SUM(IF(EVENT_CD = 9,1,0)) AS WP
, SUM(IF(EVENT_CD = 11,1,0)) AS BALK
FROM retrosheet.events
WHERE PIT_START_FL = "T"
GROUP BY PIT_ID,GAME_ID
) AS a
INNER JOIN retrosheet.games AS g
ON a.GAME_ID = g.GAME_ID;
所以,我现在想要做的是在此表中添加列,每个列都反映了表中已经存在的变量的赛季至今累积总和(对于赢得的跑分、投球的局数等) .此表中的变量显示了该给定游戏中每个变量的值。使用投球局数,例如,在给定赛季的每个后续投手开始时,我想反映该首发投手从赛季开始到他们在该赛季参加的任何比赛的连续投球局数。
有人可以帮我编写代码来创建这些递增变量(列),使用此表中已经存在的列中的值来反映每场比赛的这些赛季至今值吗?
我开始学习MySQL,但我的知识还很缺乏。
这就是我目前的想法
SET ytd_ip:= 0;
UPDATE starting_pitcher_game_log
SELECT
IF(@prevgame_yr != year_id,ip,@ytd_ip+ip) AS ip,
@prevgame_yr=year_id
FROM retrosheet.starting_pitcher_game_log
WHERE table_id=starting_pitcher_game_log
我知道这不对,但不知道如何更改它以使其正常工作
帮助会大有帮助。
澄清:感谢您强调这些选项。当我阅读它们时,我意识到我应该更清楚地阐明表格的外观以及我在寻找什么。我有一列 PITCHER_ID; GAME_ID 的列;以及投球局、赢得跑位、允许步行等列,其中包含每场比赛的每个变量的值(例如,为比赛投球的局数)。在我想创建的赛季至今列中,我想按投手 ID 列和 GAMES_ID 列对其进行排序,这样每场比赛中同一个投手的值都会递增按照投手在给定赛季参加的比赛的日期顺序。我如何确保在本赛季至今的投球局栏中特定比赛的价值是给定投手在该赛季之前参加的所有比赛中投球的总和 + 局数在那场比赛中投球;然后允许将相同的规则应用于将要为未来游戏添加的数据?
提前感谢您对此提供的任何帮助。
【问题讨论】: