MySQL - 要对同一列中的所有记录计算的列的最大值

时间:2016-04-14 03:06:45

标签: mysql

使用列中的MAX值来计算同一列中所有其他记录的正确语法是什么?

SELECT latitude,longitude,(variableData / MAX(variableData)) * 10 AS weightedData FROM heatMapData GROUP BY uniqueID;

根据我提供的示例,列variableData的MAX为每条记录返回自己,因为我对weightedData的结果为10。

对于记录,我在我的示例中提供的表heatMapData由4列组成:

  1. uniqueID - VARCHAR(255)
  2. 纬度 - DECIMAL(8,6)
  3. 经度 - DECIMAL(9,6)
  4. variableData - DECIMAL(17,2)

2 个答案:

答案 0 :(得分:1)

以下是一种利用JOINuser variable保留最大值的方法,保证MAX()只执行一次。

SELECT latitude,longitude,(variableData / @max_var_data) * 10 AS weightedData 
FROM heatMapData CROSS JOIN 
    (SELECT @max_var_data := (SELECT MAX(variableData) FROM heatMapData)) params
GROUP BY uniqueID;

答案 1 :(得分:1)

不需要用户定义的变量(如所选答案中所示)。

作为替代方案:

SELECT h.latitude
     , h.longitude
     , h.variableData / m.max_vd * 10 AS weightedData
  FROM heatMapData h
 CROSS
  JOIN ( SELECT MAX(d.variableData) AS max_vd
           FROM heatMapData d
       ) m
 GROUP BY h.uniqueID

注:

由于SELECT列表中未包含在GROUP BY中的非聚合表达式,MySQL之外的某些数据库会因语句而引发错误。 GROUP BY行为的MySQL特定扩展允许查询运行,但我们可以通过向sql_mode变量添加ONLY_FULL_GROUP_BY来使MySQL更符合标准(并抛出错误)。