MySQL SUM对具有多个值的查询

lmp*_*ce1 1 php mysql sql sum fusioncharts

我有以下查询:

$strQuery = "SELECT siteid, SUM(watts) AS wattage, unit, device, time FROM inverter WHERE siteid = '528' AND time Between '$time1' AND '$time2' Order By device Asc";

我在融合图表中制作图表并且需要每个设备的总瓦数,但是当我执行上面的查询时,它会获取所有值并将它们放置在第一个设备上.我有40个设备,需要每个设备产生总瓦数.

在图表上,我将设备显示为x轴名称标签,将瓦数显示为值.

谢谢

Kai*_*aii 5

SUM()是一个聚合函数,应与GROUP语句一起使用.如果GROUP省略statement,则将所有选定的行聚合为一个组.

请参阅docs:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

查看GROUP BY声明:

SELECT siteid, device, 
  SUM(watts) AS wattage, 
  MIN(time) as start_time, 
  MAX(time) as end_time 
  unit
FROM inverter
WHERE siteid = '528' 
  AND time BETWEEN '$time1' AND '$time2'
GROUP BY device, unit
ORDER BY device ASC
Run Code Online (Sandbox Code Playgroud)

此外,当您使用聚合并选择GROUP语句中未包含的字段(此处为:time)时,您必须确保获得所需的值.

您为每个设备获得的聚合行的值是使用许多行计算的,这些行可能包含这些字段中的单个值.当你不使用聚合函数(MIN,MAX,AVG,...),以确定哪些多个值的汇总的行应该包含,您会收到或多或少的由MySQL随机选择选择的值.

你也应该

  • 在没有必要时,不要选择这样的字段.(例如时间)
  • 使用适当的聚合功能(MIN,MAX,AVG对未包含在GROUP BY子句中的每个字段,..),以确保您得到正确的值.(这里我使用MIN和插入了测量时间跨度的开始和结束时间MAX)
  • 或者将它包含在GROUP BY子句中(我在示例中为"单位"做了这样的操作,因为当你使用SUM兆瓦和千瓦时得到错误的结果..我认为这是你使用"单位"的?)

再次:否则,此类字段中的结果值是随机的,而不是确定性的.