新表中的平均MySQL

时间:2015-05-17 02:29:08

标签: mysql-workbench

我有一个关于每秒更新天气的数据库。 它包含温度和风速。 这是我的数据库:

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 )

我的编码工作正常,但问题是我想将平均值和日期移到另一个表中。 这是表格:

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;

有可能吗?你能给我编码吗?

1 个答案:

答案 0 :(得分:1)

为了根据您从另一个表中获取的数据将新行插入数据库,您可以通过设置针对目标表的INSERT查询,然后运行子查询来执行此操作将从源表中提取数据,然后从子查询返回的结果集将用于提供用于INSERT命令的VALUES

以下是基本结构,请注意未使用VALUES关键字:

INSERT INTO `table1`
(`dateavg`, `avg_temperature`) 
  SELECT `date` , avg(`temperature`)
  FROM   `test`;

值得注意的是,结果集返回的列的位置将依次匹配其在外部查询的INSERT字段中的相应位置

e.g。如果您有查询

INSERT INTO table1 (`foo`, `bar`, `baz`)
    SELECT (`a`, `y`, `g`) FROM table2 
  • a将插入foo
  • y会进入bar
  • g会进入baz

由于各自的立场

我做了一个有效的演示 - 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`;