如何计算嵌套连接查询的平均值?

时间:2017-10-31 01:40:04

标签: mysql

我正在尝试查询每个注册表链接到的每个watts的{​​{1}}表中名为consumption的列的平均值,但我必须代表每个值分隔所述信息所属的applianceproto的内容。

因此,我必须加入每个表,最终将用户链接到我的查询。我能够完成这项任务的后半部分。但是,当我尝试使用user函数计算所述平均值时,MySQL中会出现错误。

  

1140 - 在没有GROUP BY的聚合查询中,SELECT列表的表达式#1包含非聚合列moniref.cr.idConsumption';这与sql_mode = only_full_group_by

不兼容

我已经尝试过这个查询,它实际上只能显示用户的“1”注册表,但无法找到正确计算每个设备平均值的方法。

AVG()

我期待看到这样的事情:     Succ Table

2 个答案:

答案 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