我有一个关于每秒更新天气的数据库。 它包含温度和风速。 这是我的数据库:
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;
有可能吗?你能给我编码吗?
答案 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`;