- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表,其中有一列名为“IP”,我想在同一个表“YTD_IP”中创建另一列,它会给出“IP”(投球局数)的累计年初至今总和一年中的任何给定比赛反射(reflect)了同一赛季之前的比赛(行/事件)中投球局数的总和。一旦年份发生变化,我希望总和再次从 0 开始。
这是“PIT_ID”、“YEAR_ID”、“IP”列的数据示例,以及我希望看到的“YTD_IP”列:
Pit_ID YEAR_ID IP YTD_IP
aased001 1977 9.0000 9
aased001 1977 9.0000 18
aased001 1977 7.0000 25
aased001 1977 5.0000 30
aased001 1977 6.3333 36.3333
aased001 1977 6.3333 42.6666
aased001 1977 7.0000 49.6666
aased001 1977 6.0000 55.6666
aased001 1977 9.0000 64.6666
aased001 1977 9.0000 73.6666
aased001 1977 5.0000 78.6666
aased001 1977 6.3333 84.9999
aased001 1977 7.3333 92.3333
aased001 1978 4.3333 4.3333
aased001 1978 7.0000 11.3333
aased001 1978 6.3333 17.6666
aased001 1978 3.3333 20.9999
我整理了以下代码:
ALTER TABLE starting_pitcher_game_log ADD COLUMN YTD_IP VARCHAR(255);
SET YTD_IP:= 0;
SELECT a.IP, b.YEAR_ID
IF(@prevYEAR_ID != YEAR_ID,IP,@YTD_IP+IP) AS IP,
@prevYEAR_ID=YEAR_ID
FROM starting_pitcher_game_log
但这是不对的,因为它得到以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF(@prevYEAR_ID != YEAR_ID,IP,@YTD_IP+IP) AS IP,
@prevYEAR_ID=YEAR_ID
' at line 2
有没有办法确保它适应 future 将玩的游戏?
任何帮助都会大有帮助。
嗨, Darwin ,
您能否分享可用于临时调用列的代码以及用于可创建累积总和字段的永久列的代码?特别是,我想在名为“YTD_IP”的表中创建另一列,该列将给出从赛季开始到该赛季任何给定比赛的“IP”(投球局数)的累计年初至今总和反射(reflect)给定投手在给定比赛之前的比赛(行/事件)中投出的局数 + 该比赛中投出的局数的总和。一旦季节发生变化,我希望总和再次从 0 开始。
预先感谢您的帮助。
最佳答案
我最好的建议是,不要这样做。存储可以从数据库中的其他信息派生的信息通常被认为是非常糟糕的设计,并且尝试依赖于数据库中的行的顺序肯定会导致疯狂。
这是标准化表格的第一步:
-- Table: teams
-- DROP TABLE teams;
CREATE TABLE teams
(
team_id character(3) primary key,
team_name varchar(255),
team_city varchar(255)
) engine=innodb;
-- Table: starting_pitchers_game_log
-- DROP TABLE starting_pitchers_game_log;
CREATE TABLE starting_pitchers_game_log
(
pitcher_id character(10) NOT NULL,
game_date date NOT NULL,
opposing_team character(3),
game_seq integer NOT NULL,
outcome character(1),
innings_pitched real,
bfp integer,
hits integer,
runs integer,
errors integer,
homeruns integer,
bb integer,
k integer,
ibb integer,
hbp integer,
wp integer,
balks integer,
CONSTRAINT starting_pitcher_log_pk
PRIMARY KEY (pitcher_id , game_date , game_seq ),
CONSTRAINT team_fk FOREIGN KEY (opposing_team)
REFERENCES teams (team_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
) engine=innodb;
(我不关注棒球,所以我只能猜测一些列名称。)请注意 year_id
、month_id
和 day_id
列消失了,因为这些值可以从 game_date
列重新创建,正如我在评论中指出的那样。您的 game_id
列也不见了;这可以通过连接 opposing_team
、game_date
和 game_seq
来重新创建(我认为这是为了解释双标题等)我也将 W
和 L
转换为一个列,用于保存值“W”(赢)、“L”(输)和“T”(平)。
teams
表为 3 个字符的团队 ID 提供了一个查找表。它可以扩展以保存您想要的任何其他团队数据。 (请注意,它旨在描述团队本身;团队事件将放在另一个表中。)
要回答有关“约束”子句的问题,第一个子句(CONSTRAINT starting_pitcher_log_pk
及其下方的缩进线)指定这三列的串联用作每个子句的主要唯一标识符表中的行。第二个(CONSTRAINT team_fk FOREIGN KEY (opposing_team)
及其下方的缩进线)意味着要将值放置在 opposing_team
列中,它必须已经存在于 teams.team_id
列中;您无法与不存在的球队比赛。
现在开始实际回答您的原始问题。我能想到的关于 MySQL 的最佳解决方案是一个临时表和一个存储过程,如下所示:
-- Table: ip_subtotal
-- DROP TABLE ip_subtotal;
CREATE TABLE ip_subtotal
(
pitcher_id char(10) NOT NULL,
game_date date NOT NULL,
game_seq int(11) NOT NULL,
innings_pitched double,
ip_total double DEFAULT '0.0',
CONSTRAINT ip_subtotal_pk
PRIMARY KEY (pitcher_id , game_date , game_seq )
) ENGINE=InnoDB;
存储过程:
------------------------------------------------------------------------------ --
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE PROCEDURE accumulate_innings()
BEGIN
DECLARE pit_id CHAR(10);
DECLARE gdate DATE;
DECLARE seq INT;
DECLARE in_pit REAL;
DECLARE accum REAL;
DECLARE prev_year YEAR(4);
DECLARE end_of_cursor BOOLEAN;
DECLARE c1 CURSOR FOR
SELECT pitcher_id, game_date, game_seq, innings_pitched
FROM ip_subtotal
ORDER BY pitcher_id, game_date, game_seq;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET end_of_cursor := TRUE;
TRUNCATE TABLE ip_subtotal;
INSERT INTO ip_subtotal
SELECT pitcher_id, game_date, game_seq, innings_pitched, 0.0
FROM starting_pitchers_game_log;
SET prev_year := 0;
OPEN c1;
fetch_loop: LOOP
FETCH c1 INTO pit_id, gdate, seq, in_pit;
IF end_of_cursor THEN
LEAVE fetch_loop;
END IF;
IF YEAR(gdate) != prev_year THEN
SET accum := 0.0;
SET prev_year := YEAR(gdate);
END IF;
SET accum := accum + in_pit;
UPDATE ip_subtotal
SET ip_total = accum
WHERE pitcher_id = pit_id
AND game_date = gdate
AND game_seq = seq;
END LOOP;
CLOSE c1;
END
此过程清除表 ip_subtotal
,从主表填充它,然后汇总投球局数的总计。它还使用简单的控制中断在年初重置累加器。通过执行运行该过程后
CALL accumulate_innings();
您可以根据需要查询 ip_subtotal
表或将其连接回 starting_pitchers_game_log
表。
该程序还可以扩展以接受开始和结束日期;我将其作为练习留给读者。
希望这对您有所帮助;这很有趣,迫使我学习了一点 MySQL。
关于mysql - 如何添加在同一表中的另一列上递增的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860342/
我正在 csv 上使用 hadoop 来分析一些数据。我使用sql/mysql(不确定)来分析数据,现在陷入了僵局。 我花了好几个小时在谷歌上搜索,却没有找到任何相关的东西。我需要一个查询,在该查询中
我正在为 Bootstrap 网格布局的“简单”任务而苦苦挣扎。我希望在大视口(viewport)上有 4 列,然后在中型设备上有 2 列,最后在较小的设备上只有 1 列。 当我测试我的代码片段时,似
对于这个令人困惑的标题,我深表歉意,我想不出这个问题的正确措辞。相反,我只会给你背景信息和目标: 这是在一个表中,一个人可能有也可能没有多行数据,这些行可能包含相同的 activity_id 值,也可
具有 3 列的数据库表 - A int , B int , C int 我的问题是: 如何使用 Sequelize 结果找到 A > B + C const countTasks = await Ta
我在通过以下功能编写此查询时遇到问题: 首先按第 2 列 DESC 排序,然后从“不同的第 1 列”中选择 只有 Column1 是 DISTINCT 此查询没有帮助,因为它首先从第 1 列中进行选择
使用 Bootstrap 非常有趣和有帮助,目前我在创建以下需求时遇到问题。 “使用 bootstrap 在桌面上有 4 列,在平板电脑上有 2 列,在移动设备上有 1 列”谁能告诉我正确的结构 最佳
我是 R 新手,正在问一个非常基本的问题。当然,我在尝试从所提供的示例中获取指导的同时做了功课here和 here ,但无法在我的案例中实现这个想法,即可能是由于我的问题中的比较维度更大。 我的实
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个 df , delta1 delta2 0 -1 2 0 -1 0 0 0 我想知道如何分配 delt
您好,我想知道是否可以执行以下操作。显然,我已经尝试在 phpMyAdmin 中运行它,但出现错误。也许还有另一种方式来编写此查询。 SELECT * FROM eat_eat_restaurants
我有 2 个列表(标题和数据值)。我想要将数据值列 1 匹配并替换为头文件列 1,以获得与 dataValue 列 1 和标题值列 2 匹配的值 头文件 TotalLoad,M0001001 Hois
我有两个不同长度的文件,file2 是一个很大的引用文件,我从中提取文件 1 的数据。 我有一行 awk,我通常会对其进行调整以在我的文件中进行查找和替换,但它总是在同一列中进行查找和替换。 所以对于
假设我有两个表,如下所示。 create table contract( c_ID number(1) primary key, c_name varchar2(50) not
我有一个带有 varchar 列的 H2 表,其检查约束定义如下: CONSTRAINT my_constraint CHECK (varchar_field <> '') 以下插入语句失败,但当我删
这是最少量的代码,可以清楚地说明我的问题: One Two Three 前 2 个 div 应该是 2 个左列。第三个应该占据页面的其余部分。最后,我将添加选项来隐藏和
在 Azure 中的 Log Analytics 中,我为 VM Heartbeat 选择一个预定义查询,我在编辑器中运行查询正常,但当我去创建警报时,我不断收到警报“查询未返回 TimeGenera
在 Azure 中的 Log Analytics 中,我为 VM Heartbeat 选择一个预定义查询,我在编辑器中运行查询正常,但当我去创建警报时,我不断收到警报“查询未返回 TimeGenera
今天我开始使用 JexcelApi 并遇到了这个:当您尝试从特定位置获取元素时,不是像您通常期望的那样使用sheet.getCell(row,col),而是使用sheet.getCell(col,ro
我有一个包含 28 列的数据库。第一列是代码,第二列是名称,其余是值。 public void displayData() { con.Open(); MySqlDataAdapter
我很沮丧:每当我缩小这个网页时,一切都变得一团糟。我如何将网页居中,以便我可以缩小并且元素不会被错误定位。 (它应该是 2 列,但所有内容都合并为 1)我试过 但由于某种原因,这不起作用。 www.o
我是一名优秀的程序员,十分优秀!