平均 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`;