如何使用表中的现有变量在表中创建递增变量

时间:2015-11-10 06:47:06

标签: mysql database increment

我想知道是否有人可以帮助我将增量变量(列)添加到我使用现有列在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列对其进行排序,使得每个游戏中的相同投手的值会增加按照投手在给定赛季中进行比赛的日期顺序。我怎样才能确保投球局在今季至今专栏中特定比赛的价值是在该赛季直到该比赛的所有比赛中给定投手投球的总和+局在那场比赛中投球;然后允许相同的规则应用于将来为游戏添加的数据?

提前感谢你提供任何帮助。

1 个答案:

答案 0 :(得分:0)

试试这个:

ALTER TABLE 'table_name' DROP 'id_increment';

ALTER TABLE 'table_name' ADD 'id_increment' INT NULL, ADD UNIQUE ('id_increment') ;

ALTER TABLE 'table_name' CHANGE 'id_increment' 'id_increment' INT(11) NOT NULL AUTO_INCREMENT;