我正在尝试查询每个注册表链接到的每个watts
的{{1}}表中名为consumption
的列的平均值,但我必须代表每个值分隔所述信息所属的appliance
和proto
的内容。
因此,我必须加入每个表,最终将用户链接到我的查询。我能够完成这项任务的后半部分。但是,当我尝试使用user
函数计算所述平均值时,MySQL中会出现错误。
1140 - 在没有GROUP BY的聚合查询中,SELECT列表的表达式#1包含非聚合列moniref.cr.idConsumption';这与sql_mode = only_full_group_by
不兼容
我已经尝试过这个查询,它实际上只能显示用户的“1”注册表,但无法找到正确计算每个设备平均值的方法。
AVG()
我期待看到这样的事情:
答案 0 :(得分:1)
您似乎需要SELECT a.idApliance, AVG(cr.watts), a.idApliance
FROM consumptionregistry cr INNER JOIN
apliance a
ON a.idApliance = cr.apliance_idApliance INNER JOIN
proto_has_apliance phs
ON phs.apliance_idApliance = a.idApliance INNER JOIN
proto p
ON phs.Proto_idProto = p.idProto AND p.user_idUser = 1
GROUP BY a.idApliance;
:
{{1}}
答案 1 :(得分:0)
任何使用聚合函数的列,例如AVG()
,MIN()
,MAX()
都是"聚合"列。其他人是"非聚合"。
SELECT
cr.idConsumption, this is NON-aggregating
AVG(cr.watts), this is aggregating
a.idApliance, this is NON-aggregating
p.idProto this is NON-aggregating
所有非聚合列必须出现在group by子句中。在大多数使用SQL的数据库中始终为true,在MySQL中,当服务器设置为sql_mode
时为真设为only_full_group_by
。因此,如果您现在重新阅读错误消息,那么应该很清楚:
有3个非聚合列;所有3都应该按分组列出。
关于sql_mode
#1140 - In aggregated query without GROUP BY,
没有GROUP BY""聚合查询是指这样的事情:
select count(*) from consumptionregistry;
并且,该示例不需要GROUP BY
子句。但是只要你包含一个"非聚合的"选择中的列,您需要GROUP BY