平均 MySQL 新 table
Average MySQL in new table
我有一个每秒更新一次的天气数据库。
它包含温度和风速。
这是我的数据库:
CREATE TABLE `new_table`.`test` (
`id` INT(10) NOT NULL,
`date` DATETIME() NOT NULL,
`temperature` VARCHAR(25) NOT NULL,
`wind_speed` INT(10) NOT NULL,
`humidity` FLOAT NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
我需要找出每小时的平均温度。
这是我的代码:
Select SELECT AVG( temperature ), date
FROM new_table
GROUP BY HOUR ( date )
我的编码工作正常,但问题是我想将平均值的值和日期移动到另一个 table。
这是 table:
CREATE TABLE `new_table.`table1` (
`idsea_state` INT(10) NOT NULL,
`dateavg` DATETIME() NOT NULL,
`avg_temperature` VARCHAR(25) NOT NULL,
PRIMARY KEY (`idsea_state`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
可能吗?你能给我编码吗?
为了根据您从另一个 table 获得的数据向数据库中插入新行,您可以通过设置针对目标 table 的 INSERT
查询来完成此操作,然后 运行 一个 子查询 将从源 table 中提取数据,然后从子查询返回结果集将用于提供用于 INSERT 命令的 VALUES
这里是基本结构,注意没有使用VALUES
关键字:
INSERT INTO `table1`
(`dateavg`, `avg_temperature`)
SELECT `date` , avg(`temperature`)
FROM `test`;
还需要注意的是,结果集返回的列的位置将依次匹配到其在外部查询的INSERT字段中的相应位置
例如如果您有疑问
INSERT INTO table1 (`foo`, `bar`, `baz`)
SELECT (`a`, `y`, `g`) FROM table2
a
将被插入到 foo
y
会变成 bar
g
会变成 baz
由于各自的职位
我制作了一个可用的 demo - http://www.sqlfiddle.com/#!9/ff740/4
我做了以下更改以简化示例并仅演示所涉及的概念。
这是我对您的原始代码所做的 DDL 更改
CREATE TABLE `test` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`date` DATETIME NOT NULL,
`temperature` FLOAT NOT NULL,
`wind_speed` INT(10),
`humidity` FLOAT ,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
CREATE TABLE `table1` (
`idsea_state` INT(10) NOT NULL AUTO_INCREMENT,
`dateavg` VARCHAR(55),
`avg_temperature` VARCHAR(25),
PRIMARY KEY (`idsea_state`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
INSERT INTO `test`
(`date`, `temperature`) VALUES
('2013-05-03', 7.5),
('2013-06-12', 17.5),
('2013-10-12', 37.5);
INSERT INTO `table1`
(`dateavg`, `avg_temperature`)
SELECT `date` , avg(`temperature`)
FROM `test`;
我有一个每秒更新一次的天气数据库。 它包含温度和风速。 这是我的数据库:
CREATE TABLE `new_table`.`test` (
`id` INT(10) NOT NULL,
`date` DATETIME() NOT NULL,
`temperature` VARCHAR(25) NOT NULL,
`wind_speed` INT(10) NOT NULL,
`humidity` FLOAT NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
我需要找出每小时的平均温度。 这是我的代码:
Select SELECT AVG( temperature ), date
FROM new_table
GROUP BY HOUR ( date )
我的编码工作正常,但问题是我想将平均值的值和日期移动到另一个 table。 这是 table:
CREATE TABLE `new_table.`table1` (
`idsea_state` INT(10) NOT NULL,
`dateavg` DATETIME() NOT NULL,
`avg_temperature` VARCHAR(25) NOT NULL,
PRIMARY KEY (`idsea_state`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
可能吗?你能给我编码吗?
为了根据您从另一个 table 获得的数据向数据库中插入新行,您可以通过设置针对目标 table 的 INSERT
查询来完成此操作,然后 运行 一个 子查询 将从源 table 中提取数据,然后从子查询返回结果集将用于提供用于 INSERT 命令的 VALUES
这里是基本结构,注意没有使用VALUES
关键字:
INSERT INTO `table1`
(`dateavg`, `avg_temperature`)
SELECT `date` , avg(`temperature`)
FROM `test`;
还需要注意的是,结果集返回的列的位置将依次匹配到其在外部查询的INSERT字段中的相应位置
例如如果您有疑问
INSERT INTO table1 (`foo`, `bar`, `baz`)
SELECT (`a`, `y`, `g`) FROM table2
a
将被插入到foo
y
会变成bar
g
会变成baz
由于各自的职位
我制作了一个可用的 demo - http://www.sqlfiddle.com/#!9/ff740/4
我做了以下更改以简化示例并仅演示所涉及的概念。
这是我对您的原始代码所做的 DDL 更改
CREATE TABLE `test` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`date` DATETIME NOT NULL,
`temperature` FLOAT NOT NULL,
`wind_speed` INT(10),
`humidity` FLOAT ,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
CREATE TABLE `table1` (
`idsea_state` INT(10) NOT NULL AUTO_INCREMENT,
`dateavg` VARCHAR(55),
`avg_temperature` VARCHAR(25),
PRIMARY KEY (`idsea_state`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
INSERT INTO `test`
(`date`, `temperature`) VALUES
('2013-05-03', 7.5),
('2013-06-12', 17.5),
('2013-10-12', 37.5);
INSERT INTO `table1`
(`dateavg`, `avg_temperature`)
SELECT `date` , avg(`temperature`)
FROM `test`;