我正在为一个学校项目编写一个气象站。
在mysql中,我有1个带有读数的表和另一个带有计算值的表。我写了一个mysql查询来更新第二个表与计算值。当我运行此查询时,我收到此错误
1111 - 无效使用群组功能
我不知道我做错了什么。
我的查询:
UPDATE Waarnemingen2 As t1
INNER JOIN (SELECT `Datum_Tijd`,`Temperatuur`,`Luchtvochtigheid`,`Luchtdruk`,`Regenhoeveelheid` FROM Waarnemingen GROUP BY day(`Datum_Tijd`) + hour(`Datum_Tijd`)) as t2
SET t1.`Min. temperatuur` = MIN(`Temperatuur`),
t1.`Gem. temperatuur` = AVG(`Temperatuur`),
t1.`Max. temperatuur` = MAX(`Temperatuur`),
t1.`Min. luchtvochtigheid` = MIN(`Luchtvochtigheid`),
t1.`Gem. luchtvochtigheid` = AVG(`Luchtvochtigheid`),
t1.`Max. luchtvochtigheid` = MAX(`Luchtvochtigheid`),
t1.`Min. luchtdruk` = MIN(`Luchtdruk`),
t1.`Gem. luchtdruk` = AVG(`Luchtdruk`),
t1.`Max. luchtdruk` = MAX(`Luchtdruk`),
t1.`Regen` = SUM(`Regenhoeveelheid`)
查询应该从每小时的“Temperatuur”,“Luchtvochtigheid”和“Luchtdruk”列中取最小值,最大值和平均值。
有人可以帮助我吗?
答案 0 :(得分:0)
您的错误是因为SELECT语句中的未聚合列不在GROUP by子句中。
在带有GROUP BY的SELECT中,您可以选择的唯一列是:
否则会出现此错误。
更改子查询以执行聚合,然后只将这些聚合值分配给已连接的表。
(我不知道MySQL的语法,这段代码在SQL Server中不起作用,因为它的UPDATE JOIN有点不同,但重要的概念是聚合。)
即
UPDATE Waarnemingen2 As t1
INNER JOIN (
SELECT day(`Datum_Tijd`) as day, hour(`Datum_Tijd`) as hour, MIN(Temperatur) as Min_Temperature FROM Waarnemingen GROUP BY day(`Datum_Tijd`) , hour(`Datum_Tijd`)
) t2 on t1.day = t2.day and t1.hour = t2.hour
set
t1.MinTemp = t2.Mintemp